From 1ec119f4b5ca79d9a9578a2faeb0e5abeb23b528 Mon Sep 17 00:00:00 2001 From: Zygo Blaxell Date: Mon, 28 Feb 2022 18:09:33 -0500 Subject: [PATCH] From https://www.jwz.org/xscreensaver/xscreensaver-6.03.tar.gz -rw-rw-r-- 1 zblaxell zblaxell 25703584 Feb 28 11:57 xscreensaver-6.03.tar.gz 04b272b7b4eadb68e812c682148162bd59d3b9f8 xscreensaver-6.03.tar.gz --- Makefile.in | 6 +- OSX/Makefile | 93 +- OSX/Randomizer.m | 124 +- OSX/Randomizer.plist | 10 +- OSX/SaverListController.m | 14 +- OSX/SaverRunner.m | 3 +- OSX/SaverRunner.plist | 10 +- OSX/Updater.plist | 12 +- OSX/XScreenSaver.plist | 10 +- OSX/XScreenSaverConfigSheet.m | 43 +- OSX/XScreenSaverView.h | 10 +- OSX/XScreenSaverView.m | 268 +- OSX/bindist.rtf | 4 +- OSX/build-fntable.pl | 10 +- OSX/enable_gc.c | 368 - OSX/grabclient-osx.m | 326 +- OSX/iSaverRunner.plist | 10 +- OSX/installer.sh | 21 +- OSX/ios-function-table.m | 4 +- OSX/seticon.pl | 113 +- OSX/tvSaverRunner.plist | 10 +- OSX/update-info-plist.pl | 54 +- OSX/updates.xml | 24 +- OSX/xscreensaver.xcodeproj/project.pbxproj | 449 +- .../xcschemes/Abstractile.xcscheme | 2 +- .../xcschemes/All Savers (OpenGL).xcscheme | 2 +- .../xcschemes/All Savers (XLockmore).xcscheme | 2 +- .../All Savers (XScreenSaver).xcscheme | 2 +- .../xcschemes/All Savers.xcscheme | 2 +- .../xcshareddata/xcschemes/Anemone.xcscheme | 2 +- .../xcschemes/Anemotaxis.xcscheme | 2 +- .../xcshareddata/xcschemes/Ant.xcscheme | 2 +- .../xcschemes/AntInspect.xcscheme | 2 +- .../xcshareddata/xcschemes/AntMaze.xcscheme | 2 +- .../xcschemes/AntSpotlight.xcscheme | 2 +- .../xcschemes/Apollonian.xcscheme | 2 +- .../xcschemes/Apple2-OSX.xcscheme | 2 +- .../xcschemes/Apple2-iOS.xcscheme | 2 +- .../xcshareddata/xcschemes/Apple2.xcscheme | 2 +- .../xcshareddata/xcschemes/Atlantis.xcscheme | 2 +- .../xcschemes/Attraction.xcscheme | 2 +- .../xcshareddata/xcschemes/Atunnel.xcscheme | 2 +- .../xcshareddata/xcschemes/BSOD.xcscheme | 2 +- .../xcshareddata/xcschemes/Barcode.xcscheme | 2 +- .../xcshareddata/xcschemes/Beats.xcscheme | 2 +- .../xcschemes/BinaryHorizon.xcscheme | 2 +- .../xcschemes/BinaryRing.xcscheme | 2 +- .../xcshareddata/xcschemes/Blaster.xcscheme | 2 +- .../xcshareddata/xcschemes/BlinkBox.xcscheme | 2 +- .../xcshareddata/xcschemes/BlitSpin.xcscheme | 2 +- .../xcshareddata/xcschemes/BlockTube.xcscheme | 2 +- .../xcshareddata/xcschemes/Boing.xcscheme | 2 +- .../xcshareddata/xcschemes/Bouboule.xcscheme | 2 +- .../xcschemes/BouncingCow.xcscheme | 2 +- .../xcshareddata/xcschemes/BoxFit.xcscheme | 2 +- .../xcshareddata/xcschemes/Boxed.xcscheme | 2 +- .../xcshareddata/xcschemes/Braid.xcscheme | 2 +- .../xcshareddata/xcschemes/Bubble3D.xcscheme | 2 +- .../xcshareddata/xcschemes/Bubbles.xcscheme | 2 +- .../xcshareddata/xcschemes/Bumps.xcscheme | 2 +- .../xcshareddata/xcschemes/CCurve.xcscheme | 2 +- .../xcshareddata/xcschemes/COVID19.xcscheme | 2 +- .../xcshareddata/xcschemes/CWaves.xcscheme | 2 +- .../xcshareddata/xcschemes/Cage.xcscheme | 2 +- .../xcshareddata/xcschemes/Carousel.xcscheme | 2 +- .../xcshareddata/xcschemes/Celtic.xcscheme | 2 +- .../xcshareddata/xcschemes/Circuit.xcscheme | 2 +- .../xcshareddata/xcschemes/Cityflow.xcscheme | 2 +- .../xcshareddata/xcschemes/CloudLife.xcscheme | 2 +- .../xcschemes/CompanionCube.xcscheme | 2 +- .../xcshareddata/xcschemes/Compass.xcscheme | 2 +- .../xcshareddata/xcschemes/Coral.xcscheme | 2 +- .../xcshareddata/xcschemes/Crackberg.xcscheme | 2 +- .../xcshareddata/xcschemes/Critical.xcscheme | 2 +- .../xcshareddata/xcschemes/Crumbler.xcscheme | 2 +- .../xcshareddata/xcschemes/Crystal.xcscheme | 2 +- .../xcshareddata/xcschemes/Cube21.xcscheme | 2 +- .../xcshareddata/xcschemes/CubeStack.xcscheme | 2 +- .../xcshareddata/xcschemes/CubeStorm.xcscheme | 2 +- .../xcshareddata/xcschemes/CubeTwist.xcscheme | 2 +- .../xcshareddata/xcschemes/Cubenetic.xcscheme | 2 +- .../xcshareddata/xcschemes/CubicGrid.xcscheme | 2 +- .../xcshareddata/xcschemes/Cynosure.xcscheme | 2 +- .../xcshareddata/xcschemes/DNAlogo.xcscheme | 2 +- .../xcschemes/DangerBall.xcscheme | 2 +- .../xcschemes/DecayScreen.xcscheme | 2 +- .../xcshareddata/xcschemes/Deco.xcscheme | 2 +- .../xcshareddata/xcschemes/DeepStars.xcscheme | 2 +- .../xcshareddata/xcschemes/Deluxe.xcscheme | 2 +- .../xcshareddata/xcschemes/Demon.xcscheme | 2 +- .../xcshareddata/xcschemes/Discoball.xcscheme | 2 +- .../xcshareddata/xcschemes/Discrete.xcscheme | 2 +- .../xcshareddata/xcschemes/Distort.xcscheme | 2 +- .../xcshareddata/xcschemes/Drift.xcscheme | 2 +- .../xcschemes/DymaxionMap.xcscheme | 2 +- .../xcshareddata/xcschemes/Endgame.xcscheme | 2 +- .../xcschemes/EnergyStream.xcscheme | 2 +- .../xcshareddata/xcschemes/Engine.xcscheme | 2 +- .../xcshareddata/xcschemes/Epicycle.xcscheme | 2 +- .../xcshareddata/xcschemes/Eruption.xcscheme | 2 +- .../xcshareddata/xcschemes/Esper.xcscheme | 2 +- .../xcschemes/EtruscanVenus.xcscheme | 2 +- .../xcshareddata/xcschemes/Euler2D.xcscheme | 2 +- .../xcshareddata/xcschemes/Extrusion.xcscheme | 2 +- .../xcshareddata/xcschemes/FadePlot.xcscheme | 2 +- .../xcshareddata/xcschemes/Fiberlamp.xcscheme | 2 +- .../xcschemes/FilmLeader.xcscheme | 2 +- .../xcshareddata/xcschemes/Fireworkx.xcscheme | 2 +- .../xcshareddata/xcschemes/Flag.xcscheme | 2 +- .../xcshareddata/xcschemes/Flame.xcscheme | 2 +- .../xcshareddata/xcschemes/FlipFlop.xcscheme | 2 +- .../xcschemes/FlipScreen3D.xcscheme | 2 +- .../xcshareddata/xcschemes/FlipText.xcscheme | 2 +- .../xcshareddata/xcschemes/Flow.xcscheme | 2 +- .../xcschemes/FluidBalls.xcscheme | 2 +- .../xcschemes/FlyingToasters.xcscheme | 2 +- .../xcshareddata/xcschemes/FontGlide.xcscheme | 2 +- .../xcshareddata/xcschemes/Forest.xcscheme | 2 +- .../xcschemes/FuzzyFlakes.xcscheme | 2 +- .../xcshareddata/xcschemes/GFlux.xcscheme | 2 +- .../xcshareddata/xcschemes/GLBlur.xcscheme | 2 +- .../xcshareddata/xcschemes/GLCells.xcscheme | 2 +- .../xcschemes/GLForestFire.xcscheme | 2 +- .../xcshareddata/xcschemes/GLHanoi.xcscheme | 2 +- .../xcshareddata/xcschemes/GLKnots.xcscheme | 2 +- .../xcshareddata/xcschemes/GLMatrix.xcscheme | 2 +- .../xcshareddata/xcschemes/GLPlanet.xcscheme | 2 +- .../xcshareddata/xcschemes/GLSchool.xcscheme | 2 +- .../xcschemes/GLSlideshow.xcscheme | 2 +- .../xcshareddata/xcschemes/GLSnake.xcscheme | 2 +- .../xcshareddata/xcschemes/GLText.xcscheme | 2 +- .../xcshareddata/xcschemes/Galaxy.xcscheme | 2 +- .../xcshareddata/xcschemes/Gears.xcscheme | 2 +- .../xcshareddata/xcschemes/Geodesic.xcscheme | 2 +- .../xcschemes/GeodesicGears.xcscheme | 2 +- .../xcshareddata/xcschemes/Gibson.xcscheme | 2 +- .../xcschemes/Gleidescope.xcscheme | 2 +- .../xcshareddata/xcschemes/GlitchPEG.xcscheme | 2 +- .../xcshareddata/xcschemes/Goop.xcscheme | 2 +- .../xcshareddata/xcschemes/Grav.xcscheme | 2 +- .../xcschemes/GravityWell.xcscheme | 2 +- .../xcshareddata/xcschemes/Greynetic.xcscheme | 2 +- .../xcshareddata/xcschemes/Halftone.xcscheme | 2 +- .../xcshareddata/xcschemes/Halo.xcscheme | 2 +- .../xcshareddata/xcschemes/Handsy.xcscheme | 2 +- .../xcshareddata/xcschemes/Headroom.xcscheme | 2 +- .../xcshareddata/xcschemes/Helix.xcscheme | 2 +- .../xcshareddata/xcschemes/Hexadrop.xcscheme | 2 +- .../xcshareddata/xcschemes/Hexstrut.xcscheme | 2 +- .../xcshareddata/xcschemes/Hilbert.xcscheme | 2 +- .../xcshareddata/xcschemes/Hopalong.xcscheme | 2 +- .../xcshareddata/xcschemes/Hydrostat.xcscheme | 2 +- .../xcshareddata/xcschemes/HyperBall.xcscheme | 2 +- .../xcshareddata/xcschemes/HyperCube.xcscheme | 2 +- .../xcschemes/Hypertorus.xcscheme | 2 +- .../xcschemes/Hypnowheel.xcscheme | 2 +- .../xcshareddata/xcschemes/IFS.xcscheme | 2 +- .../xcshareddata/xcschemes/IMSMap.xcscheme | 2 +- .../xcschemes/Interaggregate.xcscheme | 2 +- .../xcschemes/Interference.xcscheme | 2 +- .../xcschemes/Intermomentary.xcscheme | 2 +- .../xcschemes/JigglyPuff.xcscheme | 2 +- .../xcshareddata/xcschemes/Jigsaw.xcscheme | 2 +- .../xcshareddata/xcschemes/Juggle.xcscheme | 2 +- .../xcshareddata/xcschemes/Juggler3D.xcscheme | 2 +- .../xcshareddata/xcschemes/Julia.xcscheme | 2 +- .../xcschemes/Kaleidescope.xcscheme | 2 +- .../xcschemes/Kaleidocycle.xcscheme | 2 +- .../xcshareddata/xcschemes/Klein.xcscheme | 2 +- .../xcshareddata/xcschemes/Kumppa.xcscheme | 2 +- .../xcshareddata/xcschemes/LCDscrub.xcscheme | 2 +- .../xcshareddata/xcschemes/LMorph.xcscheme | 2 +- .../xcshareddata/xcschemes/Lament.xcscheme | 2 +- .../xcshareddata/xcschemes/Laser.xcscheme | 2 +- .../xcshareddata/xcschemes/Lavalite.xcscheme | 2 +- .../xcshareddata/xcschemes/Lightning.xcscheme | 2 +- .../xcshareddata/xcschemes/Lisa.xcscheme | 2 +- .../xcshareddata/xcschemes/Lissie.xcscheme | 2 +- .../xcshareddata/xcschemes/Lockward.xcscheme | 2 +- .../xcshareddata/xcschemes/Loop.xcscheme | 2 +- .../xcschemes/MapScroller.xcscheme | 85 + .../xcshareddata/xcschemes/Marbling.xcscheme | 2 +- .../xcshareddata/xcschemes/Maze.xcscheme | 2 +- .../xcshareddata/xcschemes/Maze3D.xcscheme | 2 +- .../xcschemes/MemScroller.xcscheme | 2 +- .../xcshareddata/xcschemes/Menger.xcscheme | 2 +- .../xcshareddata/xcschemes/MetaBalls.xcscheme | 2 +- .../xcschemes/MirrorBlob.xcscheme | 2 +- .../xcshareddata/xcschemes/Moebius.xcscheme | 2 +- .../xcschemes/MoebiusGears.xcscheme | 2 +- .../xcshareddata/xcschemes/Moire.xcscheme | 2 +- .../xcshareddata/xcschemes/Moire2.xcscheme | 2 +- .../xcshareddata/xcschemes/Molecule.xcscheme | 2 +- .../xcshareddata/xcschemes/Morph3D.xcscheme | 2 +- .../xcshareddata/xcschemes/Mountain.xcscheme | 2 +- .../xcshareddata/xcschemes/Munch.xcscheme | 2 +- .../xcshareddata/xcschemes/NerveRot.xcscheme | 2 +- .../xcshareddata/xcschemes/Noof.xcscheme | 2 +- .../xcshareddata/xcschemes/NoseGuy.xcscheme | 2 +- .../xcshareddata/xcschemes/Obsolete.xcscheme | 2 +- .../xcshareddata/xcschemes/Pacman.xcscheme | 2 +- .../xcshareddata/xcschemes/Pedal.xcscheme | 2 +- .../xcshareddata/xcschemes/Peepers.xcscheme | 2 +- .../xcshareddata/xcschemes/Penetrate.xcscheme | 2 +- .../xcshareddata/xcschemes/Penrose.xcscheme | 2 +- .../xcshareddata/xcschemes/Petri.xcscheme | 2 +- .../xcschemes/Phosphor-OSX.xcscheme | 2 +- .../xcschemes/Phosphor-iOS.xcscheme | 2 +- .../xcshareddata/xcschemes/Phosphor.xcscheme | 2 +- .../xcshareddata/xcschemes/Photopile.xcscheme | 2 +- .../xcshareddata/xcschemes/Piecewise.xcscheme | 2 +- .../xcshareddata/xcschemes/Pinion.xcscheme | 2 +- .../xcshareddata/xcschemes/Pipes.xcscheme | 2 +- .../xcshareddata/xcschemes/Polyhedra.xcscheme | 2 +- .../xcschemes/Polyominoes.xcscheme | 2 +- .../xcshareddata/xcschemes/Polytopes.xcscheme | 2 +- .../xcshareddata/xcschemes/Pong.xcscheme | 2 +- .../xcschemes/PopSquares.xcscheme | 2 +- .../xcschemes/ProjectivePlane.xcscheme | 2 +- .../xcschemes/Providence.xcscheme | 2 +- .../xcshareddata/xcschemes/Pulsar.xcscheme | 2 +- .../xcshareddata/xcschemes/Pyro.xcscheme | 2 +- .../xcshareddata/xcschemes/Qix.xcscheme | 2 +- .../xcschemes/QuasiCrystal.xcscheme | 2 +- .../xcshareddata/xcschemes/Queens.xcscheme | 2 +- .../xcshareddata/xcschemes/RDbomb.xcscheme | 2 +- .../xcschemes/RandomXScreenSaver.xcscheme | 16 +- .../xcshareddata/xcschemes/RaverHoop.xcscheme | 2 +- .../xcschemes/RazzleDazzle.xcscheme | 2 +- .../xcshareddata/xcschemes/Ripples.xcscheme | 2 +- .../xcshareddata/xcschemes/Rocks.xcscheme | 2 +- .../xcshareddata/xcschemes/RomanBoy.xcscheme | 2 +- .../xcshareddata/xcschemes/Rorschach.xcscheme | 2 +- .../xcshareddata/xcschemes/RotZoomer.xcscheme | 2 +- .../xcshareddata/xcschemes/Rotor.xcscheme | 2 +- .../xcshareddata/xcschemes/Rubik.xcscheme | 2 +- .../xcschemes/RubikBlocks.xcscheme | 2 +- .../xcshareddata/xcschemes/SBalls.xcscheme | 2 +- .../xcschemes/SaverTester.xcscheme | 2 +- .../xcshareddata/xcschemes/Scooter.xcscheme | 2 +- .../xcshareddata/xcschemes/ShadeBobs.xcscheme | 2 +- .../xcschemes/Sierpinski.xcscheme | 2 +- .../xcschemes/Sierpinski3D.xcscheme | 2 +- .../xcschemes/SkyTentacles.xcscheme | 2 +- .../xcschemes/SlideScreen.xcscheme | 2 +- .../xcshareddata/xcschemes/Slip.xcscheme | 2 +- .../xcshareddata/xcschemes/Sonar.xcscheme | 2 +- .../xcshareddata/xcschemes/SpeedMine.xcscheme | 2 +- .../xcshareddata/xcschemes/Sphere.xcscheme | 2 +- .../xcschemes/SphereEversion.xcscheme | 2 +- .../xcschemes/Spheremonics.xcscheme | 2 +- .../xcshareddata/xcschemes/Spiral.xcscheme | 2 +- .../xcshareddata/xcschemes/SplitFlap.xcscheme | 2 +- .../xcshareddata/xcschemes/Splodesic.xcscheme | 2 +- .../xcshareddata/xcschemes/Spotlight.xcscheme | 2 +- .../xcschemes/Sproingies.xcscheme | 2 +- .../xcshareddata/xcschemes/Squiral.xcscheme | 2 +- .../xcschemes/Squirtorus.xcscheme | 85 + .../xcshareddata/xcschemes/Stairs.xcscheme | 2 +- .../xcshareddata/xcschemes/StarWars.xcscheme | 2 +- .../xcshareddata/xcschemes/Starfish.xcscheme | 2 +- .../xcschemes/StonerView.xcscheme | 2 +- .../xcshareddata/xcschemes/Strange.xcscheme | 2 +- .../xcshareddata/xcschemes/Substrate.xcscheme | 2 +- .../xcschemes/Superquadrics.xcscheme | 2 +- .../xcshareddata/xcschemes/Surfaces.xcscheme | 2 +- .../xcshareddata/xcschemes/Swirl.xcscheme | 2 +- .../xcshareddata/xcschemes/T3D.xcscheme | 2 +- .../xcshareddata/xcschemes/Tangram.xcscheme | 2 +- .../xcschemes/Tessellimage.xcscheme | 2 +- .../xcschemes/TestX11-iOS.xcscheme | 2 +- .../xcshareddata/xcschemes/TestX11.xcscheme | 2 +- .../xcshareddata/xcschemes/Thornbird.xcscheme | 2 +- .../xcschemes/TimeTunnel.xcscheme | 2 +- .../xcshareddata/xcschemes/TopBlock.xcscheme | 2 +- .../xcshareddata/xcschemes/Triangle.xcscheme | 2 +- .../xcshareddata/xcschemes/TronBit.xcscheme | 2 +- .../xcshareddata/xcschemes/Truchet.xcscheme | 2 +- .../xcshareddata/xcschemes/Twang.xcscheme | 2 +- .../xcshareddata/xcschemes/Unicrud.xcscheme | 2 +- .../xcschemes/UnknownPleasures.xcscheme | 2 +- .../xcshareddata/xcschemes/VFeedback.xcscheme | 2 +- .../xcschemes/Vermiculate.xcscheme | 2 +- .../xcshareddata/xcschemes/Vigilance.xcscheme | 2 +- .../xcshareddata/xcschemes/Vines.xcscheme | 2 +- .../xcshareddata/xcschemes/Voronoi.xcscheme | 2 +- .../xcshareddata/xcschemes/Wander.xcscheme | 2 +- .../xcschemes/WebCollage.xcscheme | 2 +- .../xcschemes/WhirlWindWarp.xcscheme | 2 +- .../xcshareddata/xcschemes/Whirlygig.xcscheme | 2 +- .../xcschemes/WindupRobot.xcscheme | 2 +- .../xcshareddata/xcschemes/Worm.xcscheme | 2 +- .../xcshareddata/xcschemes/Wormhole.xcscheme | 2 +- .../xcshareddata/xcschemes/XAnalogTV.xcscheme | 2 +- .../xcshareddata/xcschemes/XFlame.xcscheme | 2 +- .../xcshareddata/xcschemes/XJack.xcscheme | 2 +- .../xcshareddata/xcschemes/XLyap.xcscheme | 2 +- .../xcshareddata/xcschemes/XMatrix.xcscheme | 2 +- .../xcshareddata/xcschemes/XRaySwarm.xcscheme | 2 +- .../xcschemes/XScreenSaver-iOS.xcscheme | 2 +- .../xcschemes/XScreenSaver-tvOS.xcscheme | 2 +- .../xcschemes/XScreenSaverUpdater.xcscheme | 2 +- .../xcschemes/XSpirograph.xcscheme | 2 +- .../xcshareddata/xcschemes/Zoom.xcscheme | 2 +- .../xcshareddata/xcschemes/enable_gc.xcscheme | 2 +- .../xcschemes/images_png_h.xcscheme | 2 +- .../xcshareddata/xcschemes/jwxyz.xcscheme | 2 +- .../xcshareddata/xcschemes/m6502.h.xcscheme | 2 +- .../xcshareddata/xcschemes/m6502.xcscheme | 2 +- .../xcschemes/molecules.h.xcscheme | 2 +- README | 11 + aclocal.m4 | 3673 +- android/Makefile | 7 +- android/README | 2 + android/xscreensaver/jni/Android.mk | 3 + config.h.in | 39 +- configure | 12324 +++--- configure.ac | 152 +- driver/Makefile.in | 25 +- driver/XScreenSaver.ad.in | 14 +- driver/XScreenSaver_ad.h | 19 +- driver/auth.h | 4 +- driver/clientmsg.c | 5 +- driver/demo-Gtk-conf.c | 1 + driver/demo-Gtk.c | 33 +- driver/dialog.c | 118 +- driver/exts.c | 6 +- driver/fade.c | 21 +- driver/passwd-helper.c | 158 - driver/passwd-pam.c | 18 +- driver/test-screens.c | 2 +- driver/test-xinput.c | 666 +- driver/xinput.c | 149 +- driver/xinput.h | 2 +- driver/xscreensaver-auth.c | 11 +- driver/xscreensaver-gfx.c | 10 +- driver/xscreensaver-systemd.c | 18 +- driver/xscreensaver.c | 10 +- hacks/Makefile.in | 40 +- hacks/analogtv-cli.c | 24 +- hacks/bsod.c | 11 +- hacks/check-configs.pl | 4 +- hacks/config/README | 4 +- hacks/config/crystal.xml | 5 +- hacks/config/cube21.xml | 5 +- hacks/config/energystream.xml | 4 +- hacks/config/eruption.xml | 5 +- hacks/config/fireworkx.xml | 5 +- hacks/config/gears.xml | 4 +- hacks/config/glplanet.xml | 6 +- hacks/config/mapscroller.xml | 118 + hacks/config/{rd-bomb.xml => rdbomb.xml} | 2 +- hacks/config/sphereeversion.xml | 59 +- hacks/config/squirtorus.xml | 40 + hacks/glx/Makefile.in | 191 +- hacks/glx/dxf2gl.pl | 13 +- hacks/glx/dymaxionmap.c | 133 +- hacks/glx/glplanet.c | 246 +- hacks/glx/glsl-utils.c | 2 +- hacks/glx/glslideshow.c | 90 +- hacks/glx/grab-ximage.c | 21 +- hacks/glx/mapcities.h | 896 + hacks/glx/mapscroller.c | 1460 + hacks/glx/mapscroller.man | 117 + hacks/glx/mapscroller.pl | 489 + hacks/glx/sonar-icmp.c | 7 + hacks/glx/sphereeversion-analytic.c | 2232 ++ hacks/glx/sphereeversion-corrugations.c | 2283 ++ hacks/glx/sphereeversion.c | 2670 +- hacks/glx/sphereeversion.h | 210 + hacks/glx/sphereeversion.man | 236 +- hacks/glx/squirtorus.c | 1023 + hacks/glx/squirtorus.man | 61 + hacks/glx/texfont.c | 12 +- hacks/glx/timezones.c | 3982 ++ hacks/glx/timezones.dxf | 31768 ++++++++++++++++ hacks/glx/xlock-gl-utils.c | 7 +- hacks/images/earth.png | Bin 433159 -> 1823722 bytes hacks/images/earth_night.png | Bin 390020 -> 977736 bytes hacks/images/earth_water.png | Bin 0 -> 82065 bytes hacks/images/oceantiles_12.png | Bin 0 -> 188823 bytes hacks/marbling.c | 68 +- hacks/munge-ad.pl | 3 +- hacks/{rd-bomb.c => rdbomb.c} | 0 hacks/{rd-bomb.man => rdbomb.man} | 0 hacks/recanim.c | 4 + hacks/xmatrix.c | 9 +- hacks/xmatrix.man | 2 +- hacks/xscreensaver-getimage-file.man | 11 +- hacks/xscreensaver-getimage-video.man | 7 +- hacks/xscreensaver-getimage.c | 31 +- hacks/xscreensaver-text | 24 +- jwxyz/jwxyz-cocoa.m | 2 +- jwxyz/jwxyz.m | 7 +- po/Makefile.in.in | 8 +- po/POTFILES.in | 5 +- po/be.po | 5279 +++ po/ca.po | 8937 +++++ po/da.po | 19342 ++++++---- po/de.po | 23373 +++++++----- po/el.po | 5445 +++ po/es.po | 18215 +++++---- po/et.po | 13026 ++++--- po/fi.po | 12803 ++++--- po/fr.po | 17516 +++++---- po/hu.po | 19056 +++++---- po/it.po | 12798 ++++--- po/ja.po | 2473 +- po/ko.po | 15554 ++++---- po/lt.po | 9431 +++++ po/nb.po | 15712 +++++--- po/nl.po | 8271 ++-- po/pl.po | 15722 ++++---- po/pt.po | 18455 +++++---- po/pt_BR.po | 17198 +++++---- po/ru.po | 6099 ++- po/sk.po | 15384 ++++---- po/sv.po | 15696 ++++---- po/tr.po | 10739 ++++++ po/uk.po | 2695 ++ po/vi.po | 16115 ++++---- po/wa.po | 14569 ++++--- po/zh_CN.po | 15962 ++++---- po/zh_TW.po | 15711 ++++---- utils/font-retry.c | 23 +- utils/utf8wc.c | 2 +- utils/version.h | 6 +- utils/visual-gl.c | 19 +- utils/xft.c | 3 + utils/xft.h | 2 +- xscreensaver.spec | 2 +- 431 files changed, 297122 insertions(+), 143426 deletions(-) delete mode 100644 OSX/enable_gc.c create mode 100644 OSX/xscreensaver.xcodeproj/xcshareddata/xcschemes/MapScroller.xcscheme create mode 100644 OSX/xscreensaver.xcodeproj/xcshareddata/xcschemes/Squirtorus.xcscheme delete mode 100644 driver/passwd-helper.c create mode 100644 hacks/config/mapscroller.xml rename hacks/config/{rd-bomb.xml => rdbomb.xml} (97%) create mode 100644 hacks/config/squirtorus.xml create mode 100644 hacks/glx/mapcities.h create mode 100644 hacks/glx/mapscroller.c create mode 100644 hacks/glx/mapscroller.man create mode 100755 hacks/glx/mapscroller.pl create mode 100644 hacks/glx/sphereeversion-analytic.c create mode 100644 hacks/glx/sphereeversion-corrugations.c create mode 100644 hacks/glx/sphereeversion.h create mode 100644 hacks/glx/squirtorus.c create mode 100644 hacks/glx/squirtorus.man create mode 100644 hacks/glx/timezones.c create mode 100644 hacks/glx/timezones.dxf create mode 100644 hacks/images/earth_water.png create mode 100644 hacks/images/oceantiles_12.png rename hacks/{rd-bomb.c => rdbomb.c} (100%) rename hacks/{rd-bomb.man => rdbomb.man} (100%) create mode 100644 po/be.po create mode 100644 po/ca.po create mode 100644 po/el.po create mode 100644 po/lt.po create mode 100644 po/tr.po create mode 100644 po/uk.po diff --git a/Makefile.in b/Makefile.in index 51f071fe..1e1e2833 100644 --- a/Makefile.in +++ b/Makefile.in @@ -416,7 +416,7 @@ count:: # rsync -vax . cerebrum:src/xscreensaver/ \ cerebrum:: - rsync -vax . pi@10.0.1.46:xscreensaver/ \ + rsync -vax . pi@10.0.1.24:xscreensaver/ \ --omit-dir-times \ --delete-during \ --exclude .git \ @@ -434,6 +434,7 @@ cerebrum:: --exclude xscreensaver-5.45 \ --exclude xscreensaver-6.00 \ --exclude xscreensaver-6.01 \ + --exclude xscreensaver-6.02 \ --exclude '*~' \ --include '*.asm' \ --include '*.c' \ @@ -452,11 +453,14 @@ cerebrum:: --include '*.ttf' \ --include '*.otf' \ --include '*.ui' \ + --include '*.sh' \ + --include '*.pl' \ --include 'configure*' \ --include 'config.sub' \ --include 'config.guess' \ --include 'install-sh' \ --include 'bin2c' \ + --include 'ad2c' \ --include '*/' \ --exclude '*' diff --git a/OSX/Makefile b/OSX/Makefile index a908133c..f47a6032 100644 --- a/OSX/Makefile +++ b/OSX/Makefile @@ -1,14 +1,6 @@ # XScreenSaver for MacOS X, Copyright © 2006-2021 Jamie Zawinski. -XCODE_APP = /Applications/Xcode.app - -# To build savers that will run on MacOS 10.6 and 10.7, Xcode 5.0.2 must -# be used (as that's the latest version of Xcode that ships with a version -# of clang that implements "-fobjc-gc"). However, Xcode 5.0.2 will not -# launch on MacOS 10.11 or later. -# -# XCODE_APP = /Applications/Xcode-5.0.2.app - +XCODE_APP = /Applications/Xcode.app TARGETS = All Savers #ARCH = -arch i386 -arch x86_64 ONLY_ACTIVE_ARCH=NO CERT = 'Developer ID Installer: Jamie Zawinski (4627ATJELP)' @@ -77,7 +69,7 @@ URL = https://www.jwz.org/$(BASE) # I find wget easier to deal with, but curl is usually installed by default. #WGET = wget -q -U xscreensaver-build-osx --content-on-error=0 -O- -WGET = curl -s -A xscreensaver-build-osx -f +WGET = curl -sL -A xscreensaver-build-osx -f # Apple savers have "thumbnail.png" at 90x58 and "thumbnail@2x.png" at 180x116. # System Preferences stretches those to fill a bordered 170x105 frame. @@ -173,63 +165,6 @@ check_versions: exit $$RESULT -check_gc: - @\ - DIR="build/Release" ; \ - RESULT=0 ; \ - for S in "$$DIR/"*.saver ; do \ - SS=`echo "$$S" | sed -e 's@^.*/@@' -e 's/.saver$$//'` ; \ - D="$$S/Contents/MacOS/$$SS" ; \ - V=`otool -s __DATA __objc_imageinfo "$$D" \ - | grep ' 00 02 00 '` ; \ - if [ -z "$$V" ]; then \ - echo "$$S does not have GC enabled" ; \ - RESULT=1 ; \ - fi ; \ - done ; \ - \ - for D in "$$DIR"/webcollage-helper \ - "$$DIR"/*.saver/Contents/*/webcollage-helper \ - "$$DIR"/*.app/Contents/*/XScreenSaverUpdater \ - ; do \ - V=`otool -s __DATA __objc_imageinfo "$$D" \ - | grep ' 00 02 00 '` ; \ - if [ ! -z "$$V" ]; then \ - echo "$$D has GC enabled" ; \ - RESULT=1 ; \ - fi ; \ - done ; \ - \ - if [ "$$RESULT" = 0 ]; then echo "GC enabled" ; fi ; \ - exit $$RESULT - - -check_coretext: - @\ - DIR="build/Release" ; \ - RESULT=0 ; \ - for S in "$$DIR/"*.{saver,app} ; do \ - SS=`echo "$$S" | sed -e 's@^.*/@@' -e 's/[.][a-z]*$$//'` ; \ - D="$$S/Contents/MacOS/$$SS" ; \ - FF=`otool -l "$$D" \ - | fgrep '/CoreText.framework/' \ - | sed -n 's/^ *name \([^ ]*\).*$$/\1/p'` ; \ - if [ -z "$$FF" ] ; then \ - echo "$$S not linked with CoreText" >/dev/null ; \ - else \ - OK=`echo "$$FF" | fgrep -v '/ApplicationServices.framework/'` ; \ - if [ ! -z "$$OK" ]; then \ - echo "$$S is linked with the wrong CoreText: $$FF" ; \ - RESULT=1 ; \ - else \ - echo "$$S linked right: $$FF" >/dev/null ; \ - fi ; \ - fi ; \ - done ; \ - if [ "$$RESULT" = 0 ]; then echo "CoreText linked correctly" ; fi ; \ - exit $$RESULT - - # Arrrrgh ios-function-table.m:: @./build-fntable.pl build/Debug-iphonesimulator/XScreenSaver.app $@ @@ -280,22 +215,29 @@ test_sig:: BASE="xscreensaver-$$V" ; \ OUTDIR="../archive" ; \ DMG="$$OUTDIR/$$BASE.dmg" ; \ - SIG=`sed -n 's/^.*dsaSignature="\(.*\)".*/\1/p' updates.xml` ; \ - PUB="sparkle_dsa_pub.pem" ; \ + SIG1=`sed -n 's/^.*dsaSignature="\(.*\)".*/\1/p' updates.xml` ; \ + SIG2=`sed -n 's/^.*edSignature="\(.*\)".*/\1/p' updates.xml` ; \ + PUB1="sparkle_dsa_pub.pem" ; \ NN="t.$$$$" ; \ SIGB=/tmp/$$NN.sig ; \ HASH=/tmp/$$NN.hash ; \ rm -f "$$SIGB" "$$HASH" ; \ - if ( echo "$$SIG" | grep -qi ERROR ); then \ - echo "No signature in updates.xml" >&2 ; exit 1 ; \ + if ( echo "$$SIG1" | grep -qi ERROR ); then \ + echo "No DSA signature in updates.xml" >&2 ; exit 1 ; \ + fi ; \ + if ( echo "$$SIG2" | grep -qi ERROR ); then \ + echo "No ED signature in updates.xml" >&2 ; exit 1 ; \ fi ; \ - echo "$$SIG " | base64 -D > "$$SIGB" ; \ + \ set -e ; \ + echo "$$SIG1 " | base64 -D > "$$SIGB" ; \ for OPENSSL in /usr/bin/openssl /opt/local/bin/openssl ; do \ $$OPENSSL dgst -sha1 -binary < "$$DMG" > "$$HASH" ; \ - /bin/echo -n "$$OPENSSL `$$OPENSSL version`: " ; \ - $$OPENSSL dgst -sha1 -verify "$$PUB" -signature "$$SIGB" "$$HASH" ; \ + /bin/echo -n "DSA $$OPENSSL `$$OPENSSL version`: " ; \ + $$OPENSSL dgst -sha1 -verify "$$PUB1" -signature "$$SIGB" "$$HASH" ; \ done ; \ + echo "Warning: not verifying edSignature because I don't know how..." ; \ + \ rm -f "$$SIGB" "$$HASH" ; \ @@ -348,8 +290,7 @@ build/Release/installer.pkg: installer.rtf installer.xml installer.sh installer. rm -rf "$$STAGE" ; \ -dmg:: distdepend check_versions check_coretext -#dmg:: check_gc +dmg:: distdepend check_versions dmg:: build/Release/installer.pkg dmg:: _dmg notarize staple updates.xml diff --git a/OSX/Randomizer.m b/OSX/Randomizer.m index f8be3738..be302f89 100644 --- a/OSX/Randomizer.m +++ b/OSX/Randomizer.m @@ -15,6 +15,7 @@ #import "Randomizer.h" #import "yarandom.h" +#include # undef ya_rand_init # undef abort @@ -420,6 +421,11 @@ resource_key_for_name (NSString *s, BOOL screen_p) saver2.wantsLayer = YES; [saver2 retain]; [saver2 setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable]; + + // XScreenSaverView catches signals in initWithFrame (to log a backtrace) + // so we have to catch our signals after that. + [self initSignalHandlers]; + return saver2; } @@ -449,28 +455,118 @@ resource_key_for_name (NSString *s, BOOL screen_p) // error text shows up on the screen, and after that we're hung and you // can't unlock the screen. So... that's worse. // -#if 0 +// But let's try re-invoking the current process on signal, and just +// restarting legacyScreenSaver or whatever from scratch. Maybe that +// will work? Nope. The re-exec works under SaverTester, but when +// legacyScreenSaver is re-exec'd with the same args, the savers do +// not re-launch. +// +#if 1 + +static int saved_argc = 0; +static char **saved_argv, *saved_execpath; + + static void -signal_exception (int sig) +sighandler (int sig) { signal (sig, SIG_DFL); + + const char *s = "randomizer caught signal\n"; + write (fileno (stderr), s, strlen(s)); // no fprintf in signal handler + +# if 0 [[NSException exceptionWithName: NSInternalInconsistencyException reason: [NSString stringWithFormat: @"Signal %s", sys_signame[sig]] userInfo: nil] raise]; +# else + if (saved_argc) { + NSLog (@"randomizer: signal: re-executing %s", saved_execpath); + execvp (saved_execpath, saved_argv); + // Somehow after the exec, SIGTERM stops working. So that's great. +# undef exit + exit (1); + } +# endif +} + +static void +catch_signal (int sig, void (*handler) (int)) +{ + struct sigaction a; + a.sa_handler = handler; + sigemptyset (&a.sa_mask); + a.sa_flags = SA_NODEFER; + +# if 0 // This isn't working + a.sa_handler = SIG_IGN; + + dispatch_source_t src = + dispatch_source_create (DISPATCH_SOURCE_TYPE_SIGNAL, sig, 0, + dispatch_get_global_queue (0, 0)); + dispatch_source_set_event_handler (src, ^{ (*handler) (sig); }); + dispatch_resume (src); +# endif + + if (sigaction (sig, &a, 0) < 0) + NSLog (@"randomizer: couldn't catch signal %d", sig); } + - (void) initSignalHandlers { - signal (SIGABRT, signal_exception); - signal (SIGBUS, signal_exception); - signal (SIGSEGV, signal_exception); - signal (SIGFPE, signal_exception); - signal (SIGILL, signal_exception); - signal (SIGIOT, signal_exception); - signal (SIGSYS, signal_exception); + if (! saved_argc) { + // Get the current process's argv from the kernel. + + int mib[3] = { CTL_KERN, KERN_PROCARGS2, getpid() }; + char *buf, *s; + int i; + size_t L; + + if (sysctl (mib, 3, NULL, &L, NULL, 0) < 0) goto ERR; // get buffer size + buf = malloc (L); + if (sysctl (mib, 3, buf, &L, NULL, 0) < 0) goto ERR; // get buffer data + + saved_argc = ((int *) buf)[0]; + if (saved_argc <= 0 || saved_argc > 100) goto ERR; + saved_argv = (char **) calloc (saved_argc + 2, sizeof (*saved_argv)); + + s = buf + sizeof(int); + saved_execpath = strdup (s); + while (*s) s++; + while (!*s) s++; // execpath is followed by one or more nulls + + for (i = 0; i < saved_argc; i++) { // then we have null-separated argv + saved_argv[i] = strdup (s); + while (*s) s++; s++; + } + saved_argv[i] = 0; + } + +//catch_signal (SIGINT, sighandler); // shell ^C +//catch_signal (SIGQUIT, sighandler); // shell ^| + catch_signal (SIGILL, sighandler); + catch_signal (SIGTRAP, sighandler); + catch_signal (SIGABRT, sighandler); + catch_signal (SIGEMT, sighandler); + catch_signal (SIGFPE, sighandler); + catch_signal (SIGBUS, sighandler); + catch_signal (SIGSEGV, sighandler); + catch_signal (SIGSYS, sighandler); +//catch_signal (SIGTERM, sighandler); // kill default +//catch_signal (SIGKILL, sighandler); // -9 untrappable + catch_signal (SIGXCPU, sighandler); + catch_signal (SIGXFSZ, sighandler); + NSLog (@"randomizer: installed signal handlers for %s", saved_execpath); + return; + + ERR: + saved_argc = 0; + NSLog (@"randomizer: error getting argv"); } + #else - (void) initSignalHandlers {} #endif @@ -690,7 +786,6 @@ signal_exception (int sig) NSLog(@"cycle timer"); if (cycle_timer) [cycle_timer invalidate]; cycle_timer = 0; - [self initSignalHandlers]; [crash_label removeFromSuperview]; [crash_label setStringValue:@""]; [self fadeSaverOut]; @@ -787,6 +882,15 @@ signal_exception (int sig) - (void)animateOneFrame { +#if 0 + if (! (random() % 2000)) { + NSLog(@"randomizer: BOOM ####"); + // int x = 123; char segv = * ((char *)x); + #undef abort + abort(); + } +#endif + if (saver1) { @try { [saver1 animateOneFrame]; } @catch (NSException *e) { diff --git a/OSX/Randomizer.plist b/OSX/Randomizer.plist index 4a98c680..acf51f49 100644 --- a/OSX/Randomizer.plist +++ b/OSX/Randomizer.plist @@ -17,7 +17,7 @@ CFBundleSignature ???? CFBundleVersion - 6.02 + 6.03 LSMinimumSystemVersion ${MACOSX_DEPLOYMENT_TARGET} NSPrincipalClass @@ -25,12 +25,12 @@ LSApplicationCategoryType public.app-category.entertainment CFBundleShortVersionString - 6.02 + 6.03 CFBundleLongVersionString - 6.02 + 6.03 CFBundleGetInfoString - 6.02 + 6.03 NSHumanReadableCopyright - 6.02 + 6.03 diff --git a/OSX/SaverListController.m b/OSX/SaverListController.m index c5ff608c..34dedfc8 100644 --- a/OSX/SaverListController.m +++ b/OSX/SaverListController.m @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright © 2012-2021 Jamie Zawinski +/* xscreensaver, Copyright © 2012-2022 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -158,10 +158,19 @@ search.frame = win; + // Add left and right padding so that the lines aren't super wide. + // The whitespace looks a little odd, but short lines are easier to read. + // + double max = 640; + double w = self.tableView.frame.size.width; + if (w > max) { + double margin = (w - max) / 2; + self.tableView.layoutMargins = UIEdgeInsetsMake (0, margin, 0, margin); + } + [super viewWillLayoutSubviews]; } - - (id)initWithNames:(NSArray *)_names descriptions:(NSDictionary *)_descs; { self = [self init]; @@ -316,6 +325,7 @@ cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton; # endif // !HAVE_TVOS cell.detailTextLabel.text = desc; + cell.detailTextLabel.numberOfLines = 2; return cell; } diff --git a/OSX/SaverRunner.m b/OSX/SaverRunner.m index 52ad6ec7..8241e214 100644 --- a/OSX/SaverRunner.m +++ b/OSX/SaverRunner.m @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright © 2006-2021 Jamie Zawinski +/* xscreensaver, Copyright © 2006-2022 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -145,7 +145,6 @@ [backgroundView release]; } - # ifndef HAVE_TVOS - (void)aboutPanel:(UIView *)saverView orientation:(UIInterfaceOrientation)orient diff --git a/OSX/SaverRunner.plist b/OSX/SaverRunner.plist index 945ea300..f31883b6 100644 --- a/OSX/SaverRunner.plist +++ b/OSX/SaverRunner.plist @@ -17,7 +17,7 @@ CFBundleSignature ???? CFBundleVersion - 6.02 + 6.03 LSMinimumSystemVersion ${MACOSX_DEPLOYMENT_TARGET} NSPrincipalClass @@ -25,13 +25,13 @@ LSApplicationCategoryType public.app-category.entertainment CFBundleShortVersionString - 6.02 + 6.03 CFBundleLongVersionString - 6.02 + 6.03 CFBundleGetInfoString - 6.02 + 6.03 NSHumanReadableCopyright - 6.02 + 6.03 NSMainNibFile SaverRunner CFBundleIconFile diff --git a/OSX/Updater.plist b/OSX/Updater.plist index 5dabfd68..598aa446 100644 --- a/OSX/Updater.plist +++ b/OSX/Updater.plist @@ -17,7 +17,7 @@ CFBundleSignature ???? CFBundleVersion - 6.02 + 6.03 LSMinimumSystemVersion ${MACOSX_DEPLOYMENT_TARGET} NSPrincipalClass @@ -25,13 +25,13 @@ LSApplicationCategoryType public.app-category.entertainment CFBundleShortVersionString - 6.02 + 6.03 CFBundleLongVersionString - 6.02 + 6.03 CFBundleGetInfoString - 6.02 + 6.03 NSHumanReadableCopyright - 6.02 + 6.03 NSMainNibFile Updater CFBundleIconFile @@ -46,6 +46,8 @@ https://www.jwz.org/xscreensaver/updates.xml SUPublicDSAKeyFile sparkle_dsa_pub.pem + SUPublicEDKey + D5YfJDsnJeiG/OhmYBGrPytPDxPsq8p0lholwaueaBo= SUScheduledCheckInterval 604800 diff --git a/OSX/XScreenSaver.plist b/OSX/XScreenSaver.plist index 8c46fa48..be52fd2a 100644 --- a/OSX/XScreenSaver.plist +++ b/OSX/XScreenSaver.plist @@ -17,7 +17,7 @@ CFBundleSignature ???? CFBundleVersion - 6.02 + 6.03 LSMinimumSystemVersion ${MACOSX_DEPLOYMENT_TARGET} NSPrincipalClass @@ -25,13 +25,13 @@ LSApplicationCategoryType public.app-category.entertainment CFBundleShortVersionString - 6.02 + 6.03 CFBundleLongVersionString - 6.02 + 6.03 CFBundleGetInfoString - 6.02 + 6.03 NSHumanReadableCopyright - 6.02 + 6.03 NSMainNibFile SaverRunner diff --git a/OSX/XScreenSaverConfigSheet.m b/OSX/XScreenSaverConfigSheet.m index c7762843..04bc89e4 100644 --- a/OSX/XScreenSaverConfigSheet.m +++ b/OSX/XScreenSaverConfigSheet.m @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright © 2006-2021 Jamie Zawinski +/* xscreensaver, Copyright © 2006-2022 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -2072,9 +2072,17 @@ set_menu_item_object (NSMenuItem *item, NSObject *obj) hreffify (lab); # else // USE_HTML_LABELS + + // if (self.view.frame.size.width > 640) // A little vertical padding + text = [@"\n" stringByAppendingString: text]; + + // Small font on iPhone; normal font on iPad. + double pointsize = (self.view.frame.size.width > 800 + ? FONT_SIZE + : [NSFont systemFontSize]); HTMLLabel *lab = [[HTMLLabel alloc] initWithText:text - font:[NSFont systemFontOfSize: [NSFont systemFontSize]]]; + font:[NSFont systemFontOfSize: pointsize]]; [lab autorelease]; [lab setFrame:rect]; [lab sizeToFit]; @@ -3442,12 +3450,43 @@ wrap_with_buttons (NSWindow *window, NSView *panel) CGRect r = [parent frame]; r.size = [[UIScreen mainScreen] bounds].size; [parent setFrame:r]; + [self traverseChildren:node on:parent]; # endif // HAVE_IPHONE } +#ifdef HAVE_IPHONE +- (void)viewWillLayoutSubviews +{ + // Add left and right padding so that the lines aren't super wide. + // The whitespace looks a little odd, but short lines are easier to read. + // + double max = 700; + double w = self.tableView.frame.size.width; + if (w > max) { + double margin = (w - max) / 2; +# if 0 // Why doesn't this work? + self.tableView.layoutMargins = UIEdgeInsetsMake (0, margin, 0, margin); +# else + NSRect f = self.tableView.frame; + f.origin.x += margin; + f.size.width -= margin * 2; + [self.tableView setFrame: f]; + + // Use white instead of gray between sections. + self.tableView.backgroundColor = [UIColor whiteColor]; +# endif + } + + // Make the left and right margins match our background color. + self.tableView.superview.backgroundColor = self.tableView.backgroundColor; + +} +#endif // HAVE_IPHONE + + - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elt namespaceURI:(NSString *)ns diff --git a/OSX/XScreenSaverView.h b/OSX/XScreenSaverView.h index a6862d37..75b64056 100644 --- a/OSX/XScreenSaverView.h +++ b/OSX/XScreenSaverView.h @@ -29,7 +29,6 @@ #else # import # import -//# define USE_TOUCHBAR #endif @@ -38,7 +37,7 @@ #ifdef HAVE_IPHONE -# if defined(TARGET_OS_TV) && !defined(HAVE_TVOS) +# if TARGET_OS_TV && !defined(HAVE_TVOS) // We aren't receiving this from Xcode when compiling libjwxyz.a for tvOS. # define HAVE_TVOS 1 # endif @@ -76,8 +75,6 @@ # elif defined(HAVE_IPHONE) -# elif defined(USE_TOUCHBAR) - # endif { struct xscreensaver_function_table *xsft; @@ -120,11 +117,6 @@ # endif // !HAVE_IPHONE -# ifdef USE_TOUCHBAR - XScreenSaverView *touchbar_view; - BOOL touchbar_p; -# endif - NSOpenGLContext *ogl_ctx; // OpenGL rendering context # ifdef JWXYZ_QUARTZ diff --git a/OSX/XScreenSaverView.m b/OSX/XScreenSaverView.m index 1c453f34..3b395e88 100644 --- a/OSX/XScreenSaverView.m +++ b/OSX/XScreenSaverView.m @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright © 2006-2021 Jamie Zawinski +/* xscreensaver, Copyright © 2006-2022 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -38,22 +38,6 @@ # import #endif -/* Garbage collection only exists if we are being compiled against the - 10.6 SDK or newer, not if we are building against the 10.4 SDK. - */ -#ifndef MAC_OS_X_VERSION_10_6 -# define MAC_OS_X_VERSION_10_6 1060 /* undefined in 10.4 SDK, grr */ -#endif -#ifndef MAC_OS_X_VERSION_10_12 -# define MAC_OS_X_VERSION_10_12 101200 -#endif -#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 && \ - MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_12) - /* 10.6 SDK or later, and earlier than 10.12 SDK */ -# import -# define DO_GC_HACKERY -#endif - #undef countof #define countof(x) (sizeof((x))/sizeof((*x))) @@ -411,7 +395,7 @@ add_default_options (const XrmOptionDescRec *opts, static void sighandler (int sig) { const char *s = strsignal(sig); - if (!s) s = "Unknowng"; + if (!s) s = "Unknown"; # ifdef HAVE_IPHONE jwxyz_abort ("Signal: %s", s); // Throw NSException, show dialog # else @@ -438,21 +422,38 @@ static void sighandler (int sig) # endif } +static void +catch_signal (int sig, void (*handler) (int)) +{ + struct sigaction a; + a.sa_handler = handler; + sigemptyset (&a.sa_mask); + a.sa_flags = SA_NODEFER; + if (sigaction (sig, &a, 0) < 0) + { + char buf [255]; + sprintf (buf, "%s: couldn't catch signal %d", progname, sig); + NSLog (@"%s", buf); + } +} + static void catch_signals (void) { - signal (SIGINT, sighandler); - signal (SIGQUIT, sighandler); - signal (SIGILL, sighandler); - signal (SIGTRAP, sighandler); - signal (SIGABRT, sighandler); - signal (SIGEMT, sighandler); - signal (SIGFPE, sighandler); - signal (SIGBUS, sighandler); - signal (SIGSEGV, sighandler); - signal (SIGSYS, sighandler); - signal (SIGTERM, sighandler); - signal (SIGXCPU, sighandler); - signal (SIGXFSZ, sighandler); +//catch_signal (SIGINT, sighandler); // shell ^C +//catch_signal (SIGQUIT, sighandler); // shell ^| + catch_signal (SIGILL, sighandler); + catch_signal (SIGTRAP, sighandler); + catch_signal (SIGABRT, sighandler); + catch_signal (SIGEMT, sighandler); + catch_signal (SIGFPE, sighandler); + catch_signal (SIGBUS, sighandler); + catch_signal (SIGSEGV, sighandler); + catch_signal (SIGSYS, sighandler); +//catch_signal (SIGTERM, sighandler); // kill default +//catch_signal (SIGKILL, sighandler); // -9 untrappable + catch_signal (SIGXCPU, sighandler); + catch_signal (SIGXFSZ, sighandler); + NSLog (@"installed signal handlers"); } @@ -552,20 +553,6 @@ static void catch_signals (void) #endif // HAVE_IPHONE -#ifdef USE_TOUCHBAR -- (id) initWithFrame:(NSRect)frame - title:(NSString *)_title - isPreview:(BOOL)isPreview - isTouchbar:(BOOL)isTouchbar -{ - if (! (self = [self initWithFrame:frame title:_title isPreview:isPreview])) - return 0; - touchbar_p = isTouchbar; - return self; -} -#endif // USE_TOUCHBAR - - #ifdef HAVE_IPHONE + (Class) layerClass { @@ -866,10 +853,6 @@ static void catch_signals (void) [self setViewport]; [self createBackbuffer:new_backbuffer_size]; - -# ifdef USE_TOUCHBAR - if (touchbar_view) [touchbar_view startAnimation]; -# endif // USE_TOUCHBAR } @@ -955,14 +938,6 @@ static void catch_signals (void) backbuffer_data = NULL; backbuffer_len = 0; # endif - -# ifdef USE_TOUCHBAR - if (touchbar_view) { - [touchbar_view stopAnimation]; - [touchbar_view release]; - touchbar_view = nil; - } -# endif } @@ -990,56 +965,6 @@ static void catch_signals (void) } -#ifdef USE_TOUCHBAR - -static NSString *touchbar_cid = @"org.jwz.xscreensaver.touchbar"; -static NSString *touchbar_iid = @"org.jwz.xscreensaver.touchbar"; - -- (NSTouchBar *) makeTouchBar -{ - NSTouchBar *t = [[NSTouchBar alloc] init]; - t.delegate = self; - t.customizationIdentifier = touchbar_cid; - t.defaultItemIdentifiers = @[touchbar_iid, - NSTouchBarItemIdentifierOtherItemsProxy]; - t.customizationAllowedItemIdentifiers = @[touchbar_iid]; - t.principalItemIdentifier = touchbar_iid; - return t; -} - -- (NSTouchBarItem *)touchBar:(NSTouchBar *)touchBar - makeItemForIdentifier:(NSTouchBarItemIdentifier)id -{ - if ([id isEqualToString:touchbar_iid]) - { - NSRect rect = [self frame]; - // #### debugging - rect.origin.x = 0; - rect.origin.y = 0; - rect.size.width = 200; - rect.size.height = 40; - touchbar_view = [[[self class] alloc] - initWithFrame: rect - title: saver_title - isPreview: self.isPreview - isTouchbar: True]; - [touchbar_view setAutoresizingMask: - NSViewWidthSizable|NSViewHeightSizable]; - NSCustomTouchBarItem *item = - [[NSCustomTouchBarItem alloc] initWithIdentifier:id]; - item.view = touchbar_view; - item.customizationLabel = touchbar_cid; - - if ([self isAnimating]) - // TouchBar was created after animation begun. - [touchbar_view startAnimation]; - } - return nil; -} - -#endif // USE_TOUCHBAR - - static void screenhack_do_fps (Display *dpy, Window w, fps_state *fpst, void *closure) { @@ -1827,17 +1752,6 @@ gl_check_ver (const struct gl_version *caps, [[self window] setAcceptsMouseMovedEvents:YES]; # endif - /* In MacOS 10.5, this enables "QuartzGL", meaning that the Quartz - drawing primitives will run on the GPU instead of the CPU. - It seems like it might make things worse rather than better, - though... Plus it makes us binary-incompatible with 10.4. - -# if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 - [[self window] setPreferredBackingLocation: - NSWindowBackingLocationVideoMemory]; -# endif - */ - /* Kludge: even though the init_cb functions are declared to take 2 args, actually call them with 3, for the benefit of xlockmore_init() and xlockmore_setup(). @@ -1988,36 +1902,6 @@ gl_check_ver (const struct gl_version *caps, [self setAnimationTimeInterval:(delay / 1000000.0)]; # endif -# ifdef DO_GC_HACKERY - /* Current theory is that the 10.6 garbage collector sucks in the - following way: - - It only does a collection when a threshold of outstanding - collectable allocations has been surpassed. However, CoreGraphics - creates lots of small collectable allocations that contain pointers - to very large non-collectable allocations: a small CG object that's - collectable referencing large malloc'd allocations (non-collectable) - containing bitmap data. So the large allocation doesn't get freed - until GC collects the small allocation, which triggers its finalizer - to run which frees the large allocation. So GC is deciding that it - doesn't really need to run, even though the process has gotten - enormous. GC eventually runs once pageouts have happened, but by - then it's too late, and the machine's resident set has been - sodomized. - - So, we force an exhaustive garbage collection in this process - approximately every 5 seconds whether the system thinks it needs - one or not. - */ - { - static int tick = 0; - if (++tick > 5*30) { - tick = 0; - objc_collect (OBJC_EXHAUSTIVE_COLLECTION); - } - } -# endif // DO_GC_HACKERY - # ifdef HAVE_IPHONE } @catch (NSException *e) { @@ -2055,10 +1939,6 @@ gl_check_ver (const struct gl_version *caps, { // Render X11 into the backing store bitmap... -# ifdef USE_TOUCHBAR - if (touchbar_p) return; -# endif - # ifdef JWXYZ_QUARTZ NSAssert (backbuffer, @"no back buffer"); @@ -2072,10 +1952,6 @@ gl_check_ver (const struct gl_version *caps, # if defined HAVE_IPHONE && defined JWXYZ_QUARTZ UIGraphicsPopContext(); # endif - -# ifdef USE_TOUCHBAR - if (touchbar_view) [touchbar_view animateOneFrame]; -# endif } @@ -2629,10 +2505,15 @@ gl_check_ver (const struct gl_version *caps, [self setMultipleTouchEnabled:YES]; # endif // !HAVE_TVOS + // As of Oct 2021 (macOS 11.6, iOS 15.1) minimumNumberOfTouches and + // maximumNumberOfTouches are being ignored in gesture recognisers, + // so the 'pan2' recognizer was firing for single-touch pans. + // Instead, we now have the 'pan' do a horrible kludge, see below. + [self addGestureRecognizer: dtap]; [self addGestureRecognizer: stap]; [self addGestureRecognizer: pan]; - [self addGestureRecognizer: pan2]; +//[self addGestureRecognizer: pan2]; [self addGestureRecognizer: hold]; # ifndef HAVE_TVOS [self addGestureRecognizer: pinch]; @@ -2762,8 +2643,6 @@ gl_check_ver (const struct gl_version *caps, } -/* Single click exits saver. - */ - (void) handleTap:(UIGestureRecognizer *)sender { if (!xwindow) @@ -2785,6 +2664,10 @@ gl_check_ver (const struct gl_version *caps, xe.xbutton.x = p.x; xe.xbutton.y = p.y; +# ifndef __OPTIMIZE__ + NSLog (@"tap ButtonPress %d %d", xe.xbutton.x, xe.xbutton.y); +# endif + if (! [self sendEvent: &xe]) ; //[self beep]; @@ -2805,6 +2688,10 @@ gl_check_ver (const struct gl_version *caps, [self showCloseButton]; +# ifndef __OPTIMIZE__ + NSLog (@"double-tap KeyPress Space"); +# endif + XEvent xe; memset (&xe, 0, sizeof(xe)); xe.xkey.keycode = ' '; @@ -2823,6 +2710,29 @@ gl_check_ver (const struct gl_version *caps, { if (!xsft->event_cb || !xwindow) return; + // As of Oct 2021 (macOS 11.6, iOS 15.1) minimumNumberOfTouches and + // maximumNumberOfTouches are being ignored in gesture recognisers. + // Thus, this bullshit. If we get a multi-touch in this recogniser + // (which we should not, as it set max and min touches to 1) then + // do the double-touch swipe handler instead. the static state is + // needed because 'StateEnded' is called with numberOfTouches == 0. + { + static BOOL pan2_p = FALSE; + if (sender.state == UIGestureRecognizerStateBegan) { + pan2_p = FALSE; + if (sender.numberOfTouches == 2) + pan2_p = TRUE; + } + + if (pan2_p) { + [self handlePan2: (UIPanGestureRecognizer *) sender]; + return; + } + } + + if (sender.numberOfTouches > 1) + return; + [self showCloseButton]; XEvent xe; @@ -2859,6 +2769,16 @@ gl_check_ver (const struct gl_version *caps, break; } +# ifndef __OPTIMIZE__ + if (xe.xany.type != MotionNotify) + NSLog (@"pan (%lu) %s %d %d", + sender.numberOfTouches, + (xe.xany.type == ButtonPress ? "ButtonPress" : + xe.xany.type == ButtonRelease ? "ButtonRelease" : + xe.xany.type == MotionNotify ? "MotionNotify" : "???"), + (int) p.x, (int) p.y); +# endif + BOOL ok = [self sendEvent: &xe]; if (!ok && xe.xany.type == ButtonRelease) [self beep]; @@ -2870,6 +2790,9 @@ gl_check_ver (const struct gl_version *caps, */ - (void) handleLongPress:(UIGestureRecognizer *)sender { +# ifndef __OPTIMIZE__ + NSLog (@"long-press"); +# endif [self handlePan:sender]; } @@ -2889,7 +2812,7 @@ gl_check_ver (const struct gl_version *caps, XEvent xe; memset (&xe, 0, sizeof(xe)); - CGPoint p = [sender locationInView:self]; // this is in points, not pixels + CGPoint p = [sender translationInView:self]; // this is in points, not pixels [self convertMouse:&p]; if (fabs(p.x) > fabs(p.y)) @@ -2897,6 +2820,15 @@ gl_check_ver (const struct gl_version *caps, else xe.xkey.keycode = (p.y > 0 ? XK_Down : XK_Up); +# ifndef __OPTIMIZE__ + NSLog (@"pan2 (%lu) KeyPress %s", + sender.numberOfTouches, + (xe.xkey.keycode == XK_Right ? "Right" : + xe.xkey.keycode == XK_Left ? "Left" : + xe.xkey.keycode == XK_Up ? "Up" : "Down")); +# endif + + xe.xany.type = KeyPress; BOOL ok1 = [self sendEvent: &xe]; xe.xany.type = KeyRelease; BOOL ok2 = [self sendEvent: &xe]; @@ -2919,6 +2851,9 @@ gl_check_ver (const struct gl_version *caps, switch (sender.state) { case UIGestureRecognizerStateBegan: +# ifndef __OPTIMIZE__ + NSLog (@"Pinch start"); +# endif case UIGestureRecognizerStateChanged: { double scale = sender.scale; @@ -2948,6 +2883,8 @@ gl_check_ver (const struct gl_version *caps, pos.y += np.y; self.layer.position = pos; self.layer.anchorPoint = p; + + } break; @@ -2955,6 +2892,10 @@ gl_check_ver (const struct gl_version *caps, { // When released, snap back to the default zoom (but animate it). +# ifndef __OPTIMIZE__ + NSLog (@"Pinch end"); +# endif + CABasicAnimation *a1 = [CABasicAnimation animationWithKeyPath:@"position.x"]; a1.fromValue = [NSNumber numberWithFloat: self.layer.position.x]; @@ -3029,12 +2970,13 @@ gl_check_ver (const struct gl_version *caps, - (void) showCloseButton { - double iw = 24; + int width = self.bounds.size.width; + double scale = width > 800 ? 2 : 1; // iPad + double iw = 24 * scale; double ih = iw; - double off = 4; + double off = 4 * scale; if (!closeBox) { - int width = self.bounds.size.width; closeBox = [[UIView alloc] initWithFrame:CGRectMake(0, 0, width, ih + off)]; closeBox.backgroundColor = [UIColor clearColor]; diff --git a/OSX/bindist.rtf b/OSX/bindist.rtf index 92e27e14..29872440 100644 --- a/OSX/bindist.rtf +++ b/OSX/bindist.rtf @@ -16,8 +16,8 @@ \b0 by Jamie Zawinski\ and many others\ \ -version 6.02\ -11-Oct-2021\ +version 6.03\ +27-Feb-2022\ \ {\field{\*\fldinst{HYPERLINK "https://www.jwz.org/xscreensaver/"}}{\fldrslt \cf2 \ul \ulc2 https://www.jwz.org/xscreensaver/}}\ \pard\pardeftab720 diff --git a/OSX/build-fntable.pl b/OSX/build-fntable.pl index eef45c42..0c80f00b 100755 --- a/OSX/build-fntable.pl +++ b/OSX/build-fntable.pl @@ -1,5 +1,5 @@ #!/usr/bin/perl -w -# Copyright © 2012-2021 Jamie Zawinski +# Copyright © 2012-2022 Jamie Zawinski # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that @@ -23,7 +23,7 @@ require 5; use strict; my $progname = $0; $progname =~ s@.*/@@g; -my ($version) = ('$Revision: 1.12 $' =~ m/\s(\d[.\d]+)\s/s); +my ($version) = ('$Revision: 1.14 $' =~ m/\s(\d[.\d]+)\s/s); my $verbose = 1; @@ -35,6 +35,7 @@ my %disable = ( 'glitchpeg' => 1, 'lcdscrub' => 1, 'lockward' => 1, + 'mapscroller' => 1, 'webcollage' => 1, 'testx11' => 1, 'covid19' => 1, # Fuck you, Apple. @@ -84,7 +85,6 @@ sub build_h($) { print STDERR "$progname: skipping $name\n" if ($verbose > 1); next; } - $name =~ s/-//g; print STDERR "$progname: found $name\n" if ($verbose > 1); $names{$name} = 1; } @@ -109,7 +109,9 @@ sub build_h($) { $body .= "extern struct $suf"; foreach my $s (@names, 'testx11') { - $body .= "\n ${s}_${suf},"; + my $s2 = $s; + $s2 =~ s/-/_/g; + $body .= "\n ${s2}_${suf},"; } $body =~ s/,\s*$/;/s; diff --git a/OSX/enable_gc.c b/OSX/enable_gc.c deleted file mode 100644 index 0717701e..00000000 --- a/OSX/enable_gc.c +++ /dev/null @@ -1,368 +0,0 @@ -/* enable_gc.c, Copyright (c) 2014 Dave Odell - * - * 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. No representations are made about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - * - * The problem: - * - * - OSX 10.5 and earlier require .saver bundles to not use GC. - * - OSX 10.6 and 10.7 require .saver bundles to use GC. - * - OSX 10.8 and later require .saver bundles to not use GC. - * - * So the way to build a portable .saver is to build it with "GC optional", - * via "-fobjc-gc" on the x86-64 architecture. - * - * But XCode 5.0.2 was the last version of XCode to support building - * executables that support GC, even optionally. So there's no way to make - * the XCode that ships with OSX 10.9 create a .saver bundle that will work - * on OSX 10.6 and 10.7. Though it will work on 10.5! - * - * The fix: after compiling, hand-hack the generated binary to tag the - * x86-64 arch with the OBJC_IMAGE_SUPPORTS_GC flag. - * - * Specifically, OR the __DATA,__objc_imageinfo section with - * "00 00 00 00 02 00 00 00"; normally this section is all zeros. - * The __objc_imageinfo section corresponds to struct objc_image_info in: - * http://www.opensource.apple.com/source/objc4/objc4-551.1/runtime/objc-private.h - * You can use "otool -o Interference.saver/Contents/MacOS/Interference" - * or "otool -s __DATA __objc_imageinfo Interference" to look at the - * section. - * - * This means that the binary is marked as supporting GC, but there - * are no actual GC-supporting write barriers compiled in! So does it - * actually ever GC? Yes, apparently it does. Apparently what's - * going on is that incremental-GCs are doing nothing, but full-GCs - * still collect ObjC objects properly. - * - * Mad Science! - * - * In the xscreensaver build process, the "enable_gc" target is a - * dependency of "libjwxyz" (so that it gets built first) and is - * invoked by "update-info-plist.pl" (so that it gets run on every - * saver). - * - * - * UPDATE, 2-Jun-2014: - * - * Actually, this seems not to be working. We're seeing intermittent - * crashes in malloc/calloc/free on 10.6 64 bit. When compiled with - * legit -fobjc-gc, those crashes don't occur. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define BOUNDS_CHECK(ptr, end) \ - ((const void *)((ptr) + 1) <= (const void *)(end)) - -#define BOUNDS_CHECK_PRINT(ptr, end) \ - (BOUNDS_CHECK(ptr, end) ? 1 : (_got_eof(), 0)) - -/* - This part is lifted from objc-private.h, because it's not present on - most OS X systems. - http://www.opensource.apple.com/source/objc4/objc4-551.1/runtime/objc-private.h - */ - -typedef struct { - uint32_t version; // currently 0 - uint32_t flags; -} objc_image_info; - -// masks for objc_image_info.flags -#define OBJC_IMAGE_IS_REPLACEMENT (1<<0) -#define OBJC_IMAGE_SUPPORTS_GC (1<<1) -#define OBJC_IMAGE_REQUIRES_GC (1<<2) -#define OBJC_IMAGE_OPTIMIZED_BY_DYLD (1<<3) -#define OBJC_IMAGE_SUPPORTS_COMPACTION (1<<4) // might be re-assignable - -/* End objc-private.h excerpt. */ - -static void -_got_eof() -{ - fputs("Error: Unexpected EOF\n", stderr); -} - -/* This will probably only ever run on OS X, so CoreFoundation is used here. */ - -static inline uint32_t -_be_u32(uint32_t x) /* Big Endian _ Unsigned int 32-bit */ -{ - return (uint32_t)CFSwapInt32BigToHost(x); -} - -static inline uint32_t -_le_u32(uint32_t x) /* Little Endian _ Unsigned int 32-bit */ -{ - return (uint32_t)CFSwapInt32LittleToHost(x); -} - -static inline uint32_t -_le_u64(uint64_t x) /* Little Endian _ Unsigned int 64-bit */ -{ - return (uint32_t)CFSwapInt64LittleToHost(x); -} - -static int -_handle_x86_64(void *exec, void *exec_end) -{ - const uint32_t *magic = exec; - - if(!BOUNDS_CHECK_PRINT(magic, exec_end)) - return EXIT_FAILURE; - - if(*magic != _le_u32(MH_MAGIC_64)) - { - fputs("Error: Unknown magic number on Mach header.\n", stderr); - return EXIT_FAILURE; - } - - /* Mach headers can be little-endian or big-endian. */ - - const struct mach_header_64 *hdr = (const struct mach_header_64 *)magic; - if(!BOUNDS_CHECK_PRINT(hdr, exec_end)) - return EXIT_FAILURE; - - if(hdr->cputype != _le_u32(CPU_TYPE_X86_64)) - { - fputs("Error: Unexpected CPU type on Mach header.\n", stderr); - return EXIT_FAILURE; - } - - /* I may have missed a few _le_u32 calls, so watch out on PowerPC (heh). */ - - if((const uint8_t *)hdr + _le_u32(hdr->sizeofcmds) > - (const uint8_t *)exec_end) - { - _got_eof(); - return EXIT_FAILURE; - } - - const struct load_command *load_cmd = (const struct load_command *)(hdr + 1); - const void *cmds_end = (const uint8_t *)load_cmd + hdr->sizeofcmds; - - for(unsigned i = 0; i != _le_u32(hdr->ncmds); ++i) - { - if(!BOUNDS_CHECK_PRINT(load_cmd, cmds_end)) - return EXIT_FAILURE; - - const struct load_command *next_load_cmd = - (const struct load_command *)((const uint8_t *)load_cmd + - _le_u32(load_cmd->cmdsize)); - - if(load_cmd->cmd == _le_u32(LC_SEGMENT_64)) - { - const struct segment_command_64 *seg_cmd = - (const struct segment_command_64 *)load_cmd; - if(!BOUNDS_CHECK_PRINT(seg_cmd, cmds_end)) - return EXIT_FAILURE; - - if(!strcmp(seg_cmd->segname, "__DATA")) - { - const struct section_64 *sect = - (const struct section_64 *)(seg_cmd + 1); - for(unsigned j = 0; j != _le_u32(seg_cmd->nsects); ++j) - { - if(!BOUNDS_CHECK_PRINT(§[j], next_load_cmd)) - return EXIT_FAILURE; - - if(strcmp(sect[j].segname, "__DATA")) - fprintf(stderr, - "Warning: segment name mismatch in __DATA,%.16s\n", - sect[j].sectname); - - if(!memcmp(sect[j].sectname, "__objc_imageinfo", 16)) - { /* No null-terminator here. */ - if(_le_u64(sect[j].size) < sizeof(objc_image_info)) - { - fputs("__DATA,__objc_imageinfo too small.\n", - stderr); - return EXIT_FAILURE; - } - - /* - Not checked: - - Overlapping segments. - - Segments overlapping the load commands. - */ - - objc_image_info *img_info = (objc_image_info *) - ((uint8_t *)exec + _le_u64(sect[j].offset)); - - if(!BOUNDS_CHECK_PRINT(img_info, exec_end)) - return EXIT_FAILURE; - - if(img_info->version != 0) - { - fprintf( - stderr, - "Error: Unexpected version for " - "__DATA,__objc_imageinfo section. " - "Expected 0, got %d\n", - _le_u32(img_info->version)); - return EXIT_FAILURE; - } - - if(img_info->flags & - _le_u32(OBJC_IMAGE_REQUIRES_GC | - OBJC_IMAGE_SUPPORTS_GC)) - { - fputs("Warning: Image already supports GC.\n", - stderr); - return EXIT_SUCCESS; - } - - /* Finally, do the work. */ - img_info->flags |= _le_u32(OBJC_IMAGE_SUPPORTS_GC); - return EXIT_SUCCESS; - } - } - } - } - - load_cmd = next_load_cmd; - } - - if((const void *)load_cmd > cmds_end) - { - _got_eof(); - return EXIT_FAILURE; - } - - assert(load_cmd == cmds_end); - - fputs("Error: __DATA,__objc_imageinfo not found.\n", stderr); - return EXIT_FAILURE; -} - -int -main(int argc, const char **argv) -{ - if(argc != 2) - { - fprintf(stderr, "Usage: %s executable\n", argv[0]); - return EXIT_FAILURE; - } - - const char *exec_path = argv[1]; - - int fd = open(exec_path, O_RDWR | O_EXLOCK); - - if(fd < 0) - { - perror(exec_path); - return EXIT_FAILURE; - } - - int result = EXIT_FAILURE; - - struct stat exec_stat; - if(fstat(fd, &exec_stat) < 0) - { - perror("fstat"); - exit (1); - } - else - { - if(!(exec_stat.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) - { - fprintf(stderr, "Warning: %s is not executable.\n", exec_path); - exit (1); - } - - assert(exec_stat.st_size >= 0); - - /* - TODO (technically): mmap(2) can throw signals if somebody unplugs - the file system. In such situations, a signal handler - should be used to ensure sensible recovery. - */ - - void *exec = NULL; - - if(exec_stat.st_size) - { - exec = mmap(NULL, exec_stat.st_size, PROT_READ | PROT_WRITE, - MAP_SHARED, fd, 0); - if(exec == MAP_FAILED) - perror("mmap"); - } - - if(exec || !exec_stat.st_size) - { - const void *exec_end = (const char *)exec + exec_stat.st_size; - - const uint32_t *magic = exec; - - if(BOUNDS_CHECK_PRINT(magic, exec_end)) - { - if(*magic == _be_u32(FAT_MAGIC)) - { - struct fat_header *hdr = (struct fat_header *)magic; - if(BOUNDS_CHECK_PRINT(hdr, exec_end)) - { - uint32_t nfat_arch = _be_u32(hdr->nfat_arch); - const struct fat_arch *arch = - (const struct fat_arch *)(hdr + 1); - - unsigned i = 0; - for(;;) - { - if(i == nfat_arch) - { - /* This could be done for other architectures. */ - fputs("Error: x86_64 architecture not found.\n", - stderr); - exit (1); - break; - } - - if(!BOUNDS_CHECK_PRINT(&arch[i], exec_end)) - break; - - if(arch[i].cputype == _be_u32(CPU_TYPE_X86_64)) - { - uint8_t *obj_begin = - (uint8_t *)exec + _be_u32(arch[i].offset); - result = _handle_x86_64(obj_begin, - obj_begin + - _be_u32(arch[i].size)); - break; - } - - ++i; - } - } - } - else - { - fprintf(stderr, - "Error: %s is not a recognized Mach binary format.\n", - exec_path); - exit (1); - } - } - - munmap(exec, exec_stat.st_size); - } - } - - close(fd); - - return result; -} diff --git a/OSX/grabclient-osx.m b/OSX/grabclient-osx.m index c731d50f..e29e8da1 100644 --- a/OSX/grabclient-osx.m +++ b/OSX/grabclient-osx.m @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright (c) 1992-2018 Jamie Zawinski +/* xscreensaver, Copyright © 1992-2021 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -36,219 +36,7 @@ #endif -#ifndef MAC_OS_X_VERSION_10_6 -# define MAC_OS_X_VERSION_10_6 1060 /* undefined in 10.4 SDK, grr */ -#endif - -#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5 - - /* 10.4 code. - - This version of the code works on 10.4, but is flaky. There is - a better way to do it on 10.5 and newer, but taking this path, - then we are being compiled against the 10.4 SDK instead of the - 10.5 SDK, and the newer API is not available to us. - */ - -static void -copy_framebuffer_to_ximage (CGDirectDisplayID cgdpy, XImage *xim, - int window_x, int window_y) -{ - unsigned char *data = (unsigned char *) - CGDisplayAddressForPosition (cgdpy, window_x, window_y); - int bpp = CGDisplayBitsPerPixel (cgdpy); - int spp = CGDisplaySamplesPerPixel (cgdpy); - int bps = CGDisplayBitsPerSample (cgdpy); - int bpr = CGDisplayBytesPerRow (cgdpy); - - int y; - int ximw = xim->width; - int ximh = xim->height; - - uint32_t *odata = (uint32_t *) xim->data; - - switch (bpp) { - case 32: - if (spp != 3) abort(); - if (bps != 8) abort(); - int xwpl = xim->bytes_per_line/4; - for (y = 0; y < ximh; y++) { - // We can do this because the frame buffer and XImage are both ARGB 32. - // Both PPC and Intel use ARGB, viewed in word order (not byte-order). - memcpy (odata, data, ximw * 4); - odata += xwpl; - data += bpr; - } - break; - - case 16: - if (spp != 3) abort(); - if (bps != 5) abort(); - for (y = 0; y < ximh; y++) { - uint16_t *ip = (uint16_t *) data; - int x; - for (x = 0; x < ximw; x++) { - uint16_t p = *ip++; - // This should be ok on both PPC and Intel (ARGB, word order) - unsigned char r = (p >> 10) & 0x1F; - unsigned char g = (p >> 5) & 0x1F; - unsigned char b = (p ) & 0x1F; - r = (r << 3) | (r >> 2); - g = (g << 3) | (g >> 2); - b = (b << 3) | (b >> 2); - uint32_t pixel = 0xFF000000 | (r << 16) | (g << 8) | b; - // XPutPixel (xim, x, y, pixel); - *odata++ = pixel; - } - data += bpr; - } - break; - - case 8: - { - /* Get the current palette of the display. */ - CGDirectPaletteRef pal = CGPaletteCreateWithDisplay (cgdpy); - - /* Map it to 32bpp pixels */ - uint32_t map[256]; - for (y = 0; y < 256; y++) { - CGDeviceColor c = CGPaletteGetColorAtIndex (pal, y); - unsigned char r = c.red * 255.0; - unsigned char g = c.green * 255.0; - unsigned char b = c.blue * 255.0; - uint32_t pixel = 0xFF000000 | (r << 16) | (g << 8) | b; - map[y] = pixel; - } - - for (y = 0; y < ximh; y++) { - unsigned char *ip = data; - int x; - for (x = 0; x < ximw; x++) { - *odata++ = map[*ip++]; - } - data += bpr; - } - CGPaletteRelease (pal); - } - break; - - default: - abort(); - break; - } -} - - -/* Loads an image into the Drawable, returning once the image is loaded. - */ -Bool -osx_grab_desktop_image (Screen *screen, Window xwindow, Drawable drawable, - XRectangle *geom_ret) -{ - Display *dpy = DisplayOfScreen (screen); - NSView *nsview = jwxyz_window_view (xwindow); - NSWindow *nswindow = [nsview window]; - XWindowAttributes xgwa; - int window_x, window_y; - Window unused; - - // Figure out where this window is on the screen. - // - XGetWindowAttributes (dpy, xwindow, &xgwa); - XTranslateCoordinates (dpy, xwindow, RootWindowOfScreen (screen), 0, 0, - &window_x, &window_y, &unused); - - // Use the size of the Drawable, not the Window. - { - Window r; - int x, y; - unsigned int w, h, bbw, d; - XGetGeometry (dpy, drawable, &r, &x, &y, &w, &h, &bbw, &d); - xgwa.width = w; - xgwa.height = h; - } - - // Create a tmp ximage to hold the screen data. - // - XImage *xim = XCreateImage (dpy, xgwa.visual, 32, ZPixmap, 0, 0, - xgwa.width, xgwa.height, 8, 0); - xim->data = (char *) malloc (xim->height * xim->bytes_per_line); - - - // Find the address in the frame buffer of the top left of this window. - // - CGDirectDisplayID cgdpy = 0; - { - CGPoint p; - // #### this isn't quite right for screen 2: it's offset slightly. - p.x = window_x; - p.y = window_y; - CGDisplayCount n; - CGGetDisplaysWithPoint (p, 1, &cgdpy, &n); - if (!cgdpy) abort(); - } - - // Paint a transparent "hole" in this window. - // - BOOL oopaque = [nswindow isOpaque]; - [nswindow setOpaque:NO]; - - [[NSColor clearColor] set]; - NSRectFill ([nsview frame]); - [[nswindow graphicsContext] flushGraphics]; - - - // Without this, we get a dozen black scanlines at the top. - // #### But with this, the screen saver loops, because calling this - // seems to implicitly mark the display as non-idle! - // CGDisplayCaptureWithOptions (cgdpy, kCGCaptureNoFill); - - // #### So let's try waiting for the vertical blank instead... - // Nope, that doesn't work. - // - // CGDisplayWaitForBeamPositionOutsideLines (cgdpy, 0, - // window_y + [nswindow frame].size.height); - - // #### Ok, try a busy-wait? - // Nope. - // - - // #### Ok, just fuckin' sleep! - // - usleep (100000); - - - // Pull the bits out of the frame buffer. - // - copy_framebuffer_to_ximage (cgdpy, xim, window_x, window_y); - - // CGDisplayRelease (cgdpy); - - // Make the window visible again. - // - [nswindow setOpaque:oopaque]; - - // Splat the XImage onto the target drawable (probably the window) - // and free the bits. - // - XGCValues gcv; - GC gc = XCreateGC (dpy, drawable, 0, &gcv); - XPutImage (dpy, drawable, gc, xim, 0, 0, 0, 0, xim->width, xim->height); - XFreeGC (dpy, gc); - - if (geom_ret) { - geom_ret->x = 0; - geom_ret->y = 0; - geom_ret->width = xim->width; - geom_ret->height = xim->height; - } - - XDestroyImage (xim); - return True; -} - - -#elif defined(HAVE_IPHONE) +#ifdef HAVE_IPHONE /* What a hack! @@ -277,14 +65,7 @@ osx_grab_desktop_image (Screen *screen, Window xwindow, Drawable drawable, } -#else /* MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 - - 10.5+ code. - - This version of the code is simpler and more reliable, but - uses an API that only exist on 10.5 and newer, so we can only - use it if when being compiled against the 10.5 SDK or later. - */ +#else /* macOS 10.5+ */ extern float jwxyz_scale (Window); /* jwxyzI.h */ @@ -315,6 +96,46 @@ osx_grab_desktop_image (Screen *screen, Window xwindow, Drawable drawable, cgrect.size.width = xgwa.width / s; cgrect.size.height = xgwa.height / s; + /* The following nonsense is intended to get the system to pop up the dialog + saying "do you want to allow legacyScreenSaver to be able to record your + screen?" Without the user saying yes to that, we are only able to get + the desktop background image instead of a screen shot. Also this is + async, so if that dialog has popped up, the *current* screen grab will + still fail. + + To reset answers given to that dialog: "tccutil reset ScreenCapture". + + Sadly, this is not working at all. If the .saver bundle is launched by + SaverTester, the dialog is triggered on behalf of SaverTester, but it is + not triggered on behalf of ScreenSaverEngine or System Preferences. + + Manually dragging "/System/Library/Frameworks/ScreenSaver.framework/ + PlugIns/legacyScreenSaver.appex" onto the "System Preferences / Security / + Privacy / Screen Recording" list makes screen grabbing work, but that's + a lot to ask of the end user. And, oddly, after dragging it there, it + does not appear in the list. + */ + { + static Bool done_once = False; + if (! done_once) { + done_once = True; + /* CGDisplayStreamRef stream = */ /* Just leak it, I guess? */ + CGDisplayStreamCreateWithDispatchQueue (CGMainDisplayID(), + 1, 1, kCVPixelFormatType_32BGRA, + nil, + dispatch_get_main_queue(), + nil); + /* I think that if the returned value is nil, it means the screen grab + will be returning just the background image instead of the desktop. + So in that case we could return False here to go with colorbars. + But the desktop background image is still more interesting than + colorbars, so let's just use that. */ + } + } + + + CGWindowID windowNumber = (CGWindowID) nsview.window.windowNumber; + /* If a password is required to unlock the screen, a large black window will be on top of all of the desktop windows by the time we reach here, making the screen-grab rather uninteresting. If @@ -323,10 +144,10 @@ osx_grab_desktop_image (Screen *screen, Window xwindow, Drawable drawable, intended. Oct 2016: Surprise, this trick no longer works on MacOS 10.12. Sigh. - */ - - CGWindowID windowNumber = (CGWindowID) nsview.window.windowNumber; + Nov 2021, macOS 11.6, 12.0: I'm pretty sure none of this works this way + any more, and so probably the following clause is no longer necessary? + */ { CFArrayRef L = CGWindowListCopyWindowInfo (kCGWindowListOptionOnScreenOnly, kCGNullWindowID); @@ -345,6 +166,7 @@ osx_grab_desktop_image (Screen *screen, Window xwindow, Drawable drawable, CFRelease (L); } + // Grab a screen shot of those windows below this one // (hey, X11 can't do that!) // @@ -363,10 +185,6 @@ osx_grab_desktop_image (Screen *screen, Window xwindow, Drawable drawable, return True; } -#endif /* 10.5+ code */ - - -# ifndef HAVE_IPHONE /* Returns the EXIF rotation property of the image, if any. */ @@ -375,58 +193,12 @@ exif_rotation (const char *filename) { /* As of 10.6, NSImage rotates according to EXIF by default: http://developer.apple.com/mac/library/releasenotes/cocoa/appkit.html - So this function should return -1 when *running* on 10.6 systems. - But when running against older systems, we need to examine the image - to figure out its rotation. - */ - -# if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 /* 10.6 SDK */ - - /* When we have compiled against the 10.6 SDK, we know that we are - running on a 10.6 or later system. + Prior to that, we had to do it by hand. */ return -1; - -# else /* Compiled against 10.5 SDK or earlier */ - - /* If this selector exists, then we are running against a 10.6 runtime - that does automatic EXIF rotation (despite the fact that we were - compiled against the 10.5 or earlier SDK). So in that case, this - function should no-op. - */ - if ([NSImage instancesRespondToSelector: - @selector(initWithDataIgnoringOrientation:)]) - return -1; - - /* Otherwise, go ahead and figure out what the rotational characteristics - of this image are. */ - - - - /* This is a ridiculous amount of rigamarole to go through, but for some - reason the "Orientation" tag does not exist in the "NSImageEXIFData" - dictionary inside the NSBitmapImageRep of the NSImage. Several other - EXIF tags are there (e.g., shutter speed) but not orientation. WTF? - */ - CFStringRef s = CFStringCreateWithCString (NULL, filename, - kCFStringEncodingUTF8); - CFURLRef url = CFURLCreateWithFileSystemPath (NULL, s, - kCFURLPOSIXPathStyle, 0); - CGImageSourceRef cgimg = CGImageSourceCreateWithURL (url, NULL); - if (! cgimg) return -1; - - NSDictionary *props = (NSDictionary *) - CGImageSourceCopyPropertiesAtIndex (cgimg, 0, NULL); - int rot = [[props objectForKey:@"Orientation"] intValue]; - CFRelease (cgimg); - CFRelease (url); - CFRelease (s); - return rot; - -# endif /* 10.5 */ } -# endif /* HAVE_IPHONE */ +# endif /* macOS 10.5+ */ diff --git a/OSX/iSaverRunner.plist b/OSX/iSaverRunner.plist index 16ae4bb9..ed12316b 100644 --- a/OSX/iSaverRunner.plist +++ b/OSX/iSaverRunner.plist @@ -17,17 +17,17 @@ CFBundleSignature ???? CFBundleVersion - 6.02 + 6.03 LSApplicationCategoryType public.app-category.entertainment CFBundleShortVersionString - 6.02 + 6.03 CFBundleLongVersionString - 6.02 + 6.03 CFBundleGetInfoString - 6.02 + 6.03 NSHumanReadableCopyright - 6.02 + 6.03 NSMainNibFile iSaverRunner CFBundleDisplayName diff --git a/OSX/installer.sh b/OSX/installer.sh index a80782d1..0e69333b 100755 --- a/OSX/installer.sh +++ b/OSX/installer.sh @@ -1,5 +1,5 @@ -#!/bin/sh -# XScreenSaver, Copyright © 2013-2020 Jamie Zawinski +#!/bin/bash +# XScreenSaver, Copyright © 2013-2021 Jamie Zawinski # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that @@ -20,7 +20,7 @@ #set -x DEBUG=0 -REQUIRED_SPACE=160 # MB. Highly approximate. +REQUIRED_SPACE=220 # MB. Highly approximate. export PATH="/bin:/sbin:/usr/bin:/usr/sbin:$PATH" @@ -51,7 +51,7 @@ __EOF__ } -#if[ x"$DSTVOLUME" = x ]; then error "DSTVOLUME unset"; fi +if [ x"$DSTVOLUME" = x ]; then DSTVOLUME="/"; fi if [ x"$PACKAGE_PATH" = x ]; then error "PACKAGE_PATH unset"; fi if [ x"$HOME" = x ]; then error "HOME unset"; fi @@ -83,10 +83,13 @@ You can't copy the installer out of the Disk Image!" free=`df -k "$DSTVOLUME" | tail -1 | head -1 | awk '{print $4}'` -need=`echo $REQUIRED_SPACE \* 1024 | bc` +need=$(( $REQUIRED_SPACE * 1024 )) if [ "$free" -lt "$need" ]; then free=`echo $free / 1024 | bc` error "Not enough disk space: $free MB available, $REQUIRED_SPACE MB required." +else + free=$(( $free / 1024 )) + echo "Free space: $free MB" >&2 fi @@ -115,8 +118,12 @@ for f in *.{saver,app} "$UPDATER_SRC" ; do rm -rf "$DD" || error "Unable to delete $DD" if [ "$f" = "$UPDATER_SRC" ]; then - echo "Unpacking $DD" >&2 - ( cd "$DST/" && tar -xzf - ) < "$f" || error "Unable to unpack $f in $DST/" + echo "Unpacking $DST/$UPDATER_DST" >&2 + # Need to delete the old one first or tar might refuse to replace + # subdirectories with symbolic links. + rm -rf "$DST/$UPDATER_DST" + ( cd "$DST/" && tar -xzf - ) < "$f" || + error "Unable to unpack $f to $DST/$UPDATER_DST" f="$UPDATER_DST" DD="$DST/$f" EXT="app" diff --git a/OSX/ios-function-table.m b/OSX/ios-function-table.m index b1bf976b..0be6bb37 100644 --- a/OSX/ios-function-table.m +++ b/OSX/ios-function-table.m @@ -1,5 +1,5 @@ /* Generated file, do not edit. - Created: Mon Oct 4 14:33:40 2021 by build-fntable.pl 1.11. + Created: Fri Jan 14 19:56:18 2022 by build-fntable.pl 1.14. */ #import @@ -209,6 +209,7 @@ extern struct xscreensaver_function_table spotlight_xscreensaver_function_table, sproingies_xscreensaver_function_table, squiral_xscreensaver_function_table, + squirtorus_xscreensaver_function_table, stairs_xscreensaver_function_table, starfish_xscreensaver_function_table, starwars_xscreensaver_function_table, @@ -457,6 +458,7 @@ NSDictionary *make_function_table_dict(void) { @"Spotlight": [NSValue valueWithPointer:&spotlight_xscreensaver_function_table], @"Sproingies": [NSValue valueWithPointer:&sproingies_xscreensaver_function_table], @"Squiral": [NSValue valueWithPointer:&squiral_xscreensaver_function_table], + @"Squirtorus": [NSValue valueWithPointer:&squirtorus_xscreensaver_function_table], @"Stairs": [NSValue valueWithPointer:&stairs_xscreensaver_function_table], @"Starfish": [NSValue valueWithPointer:&starfish_xscreensaver_function_table], @"Star Wars": [NSValue valueWithPointer:&starwars_xscreensaver_function_table], diff --git a/OSX/seticon.pl b/OSX/seticon.pl index a4f8c2c3..f4c044ad 100755 --- a/OSX/seticon.pl +++ b/OSX/seticon.pl @@ -9,80 +9,99 @@ # software for any purpose. It is provided "as is" without express or # implied warranty. +# Change the Finder icon of a file, folder or bundle. # This is a replacement for seticon from http://osxutils.sourceforge.net/. require 5; use diagnostics; use strict; -#use IPC::Open2; -use File::Temp; my $progname = $0; $progname =~ s@.*/@@g; -my ($version) = ('$Revision: 1.7 $' =~ m/\s(\d[.\d]+)\s/s); +my ($version) = ('$Revision: 1.9 $' =~ m/\s(\d[.\d]+)\s/s); my $verbose = 0; -sub set_icon ($$) { - my ($icon, $target) = @_; - my $target_res = $target; - if (-d $target) { - $target_res = $target_res . "/Icon\r"; +# Anything placed on this list gets unconditionally deleted when this +# script exits, even if abnormally. +# +my @rm_f = (); +END { + my $exit = $?; + if (@rm_f) { + print STDERR "$progname: rm " . join(' ', @rm_f) . "\n" if ($verbose); + unlink @rm_f; } + $? = $exit; # Don't clobber this script's exit code. +} - # Rez hates absolute paths, apparently. - if ($icon =~ m@^/@s) { - my $cwd = `pwd`; - chomp $cwd; - $icon =~ s@^\Q$cwd/@@s; - } - # The Rez language is documented in "Building and Managing Programs in MPW, - # Second Edition". No longer available on Apple's servers, it can now be - # found at: - # http://www.powerpc.hu/manila/static/home/Apple/developer/Tool_Chest/Core_Mac_OS_Tools/MPW_etc./Documentation/MPW_Reference/Building_Progs_In_MPW.sit.hqx +# Like system but handles error conditions. +# +sub safe_system(@) { + my (@cmd) = @_; + print STDERR "$progname: exec: " . join(' ', @cmd) . "\n" if ($verbose); + system @cmd; + my $exit_value = $? >> 8; + my $signal_num = $? & 127; + my $dumped_core = $? & 128; + error ("$cmd[0]: core dumped!") if ($dumped_core); + error ("$cmd[0]: signal $signal_num!") if ($signal_num); + return $exit_value; +} - my $pgm = "Read 'icns' (kCustomIconResource) \"$icon\";\n"; - # Rez can read from stdin, but only if it is a file handle, not if it - # is a pipe (OS X 10.9, Xcode 5; OSX 10.11, Xcode 6). +sub set_icon($$) { + my ($icon, $target) = @_; + + error ("no such file: $icon") unless (-f $icon); + error ("no such file or directory: $target") unless (-e $target); + error ("icon must be an .icns file") unless ($icon =~ m/\.icns$/si); + + my $otarget = $target; + if (-d $target) { + $target =~ s@/+$@@s; + $target .= "/Icon\r"; + } - my ($rez_fh, $rez_filename) = File::Temp::tempfile(DIR => '.', UNLINK => 1); - print $rez_fh $pgm; - close $rez_fh; + # The Rez language is documented in "Building and Managing Programs in MPW, + # Second Edition", Appendix C. Here are some unarchived 404 URLs! + # ftp://ftp.apple.com/developer/Tool_Chest/Core_Mac_OS_Tools/MPW_etc./Documentation/MPW_Reference/Building_Progs_In_MPW.sit.hqx + # http://www.powerpc.hu/manila/static/home/Apple/developer/Tool_Chest/Core_Mac_OS_Tools/MPW_etc./Documentation/MPW_Reference/Building_Progs_In_MPW.sit.hqx - my @cmd = ('Rez', + # Rez can't read stdin, and input files must be in the current directory. - '-isysroot', - '/Applications/Xcode.app/Contents/Developer/Platforms' . - '/MacOSX.platform/Developer/SDKs/MacOSX.sdk', + my $n = rand() * 0xFFFFFFFF; + my $rsrc_tmp = sprintf("rez_%08X.rsrc", $n); + my $icon_tmp = sprintf("rez_%08X.icns", $n); + push @rm_f, ($rsrc_tmp, $icon_tmp); + unlink ($rsrc_tmp, $icon_tmp); - 'CoreServices.r', - $rez_filename, - '-o', $target_res); + safe_system ("cp", "-p", $icon, $icon_tmp); - print STDERR "$progname: exec: " . join(' ', @cmd) . "\n$pgm\n" - if ($verbose); + my $cmd = "Read 'icns' (kCustomIconResource) \"$icon_tmp\";\n"; + open (my $out, '>:raw', $rsrc_tmp) || error ("$rsrc_tmp: $!"); + print $out $cmd; + close $out; + print STDERR "$progname: $rsrc_tmp: $cmd" if ($verbose); -# my ($in, $out); -# my $pid = open2 ($out, $in, @cmd); -# print $in $pgm; -# close ($in); -# waitpid ($pid, 0); + safe_system ('Rez', - system (@cmd); + '-isysroot', # Makes it undrstand kCustomIconResource + '/Applications/Xcode.app/Contents/Developer/Platforms' . + '/MacOSX.platform/Developer/SDKs/MacOSX.sdk', + 'CoreServices.r', - my $exit = $? >> 8; - exit ($exit) if $exit; + '-a', $rsrc_tmp, + '-o', $target); # Have to also inform Finder that the icon is there, with the # com.apple.FinderInfo xattr (a FolderInfo struct). - @cmd = ('SetFile', '-a', 'C', $target); - system (@cmd); - $exit = $? >> 8; - exit ($exit) if $exit; + safe_system ('SetFile', '-a', 'C', $target); + safe_system ('SetFile', '-a', 'C', $otarget) if ($target ne $otarget); } + sub error($) { my ($err) = @_; print STDERR "$progname: $err\n"; @@ -90,7 +109,7 @@ sub error($) { } sub usage() { - print "Usage: $progname -d source [file...]\n"; + print "Usage: $progname -d icon.icns [ files-or-folders ... ]\n"; exit 1; } @@ -104,7 +123,7 @@ sub main() { elsif (m/^-/s) { usage(); } else { push @dst, $_; } } - error ("no source") unless defined($src); + error ("no icon") unless defined($src); error ("no files") unless @dst; foreach my $f (@dst) { set_icon ($src, $f); diff --git a/OSX/tvSaverRunner.plist b/OSX/tvSaverRunner.plist index 29071cd5..28ed9bd4 100644 --- a/OSX/tvSaverRunner.plist +++ b/OSX/tvSaverRunner.plist @@ -17,17 +17,17 @@ CFBundleSignature ???? CFBundleVersion - 6.02 + 6.03 LSApplicationCategoryType public.app-category.entertainment CFBundleShortVersionString - 6.02 + 6.03 CFBundleLongVersionString - 6.02 + 6.03 CFBundleGetInfoString - 6.02 + 6.03 NSHumanReadableCopyright - 6.02 + 6.03 CFBundleDisplayName ${PRODUCT_NAME} CFBundleIcons diff --git a/OSX/update-info-plist.pl b/OSX/update-info-plist.pl index 10b91cca..b709b082 100755 --- a/OSX/update-info-plist.pl +++ b/OSX/update-info-plist.pl @@ -27,7 +27,7 @@ use IO::Compress::Gzip qw(gzip $GzipError); my ($exec_dir, $progname) = ($0 =~ m@^(.*?)/([^/]+)$@); -my ($version) = ('$Revision: 1.55 $' =~ m/\s(\d[.\d]+)\s/s); +my ($version) = ('$Revision: 1.57 $' =~ m/\s(\d[.\d]+)\s/s); $ENV{PATH} = "/usr/local/bin:$ENV{PATH}"; # for seticon $ENV{PATH} = "/opt/local/bin:$ENV{PATH}"; # for macports wget @@ -344,8 +344,6 @@ sub set_thumb($) { $name =~ s@\..*?$@@s; $name = lc($name); - $name = 'rd-bomb' if ($name eq 'rdbomb'); # sigh - my $src = "$thumbdir/$name.png"; if (! -f $src) { @@ -369,53 +367,6 @@ sub set_thumb($) { } -sub enable_gc($) { - my ($app_dir) = @_; - - return unless ($app_dir =~ m@\.saver/?$@s); - my ($dir, $name) = ($app_dir =~ m@^(.*)/([^/]+)\.saver$@s); - error ("unparsable: $app_dir") unless $name; - my $exe = "$app_dir/Contents/MacOS/$name"; - my @cmd = ("$dir/enable_gc", $exe); - print STDERR "$progname: exec: " . join(' ', @cmd) . "\n" - if ($verbose > 1); - system (@cmd); - my $exit = $? >> 8; - exit ($exit) if $exit; -} - - -sub fix_coretext($) { - my ($app_dir) = @_; - - # In MacOS 10.8, they moved CoreText.framework from - # /System/Library/Frameworks/ApplicationServices.framework/Frameworks/ - # to /System/Library/Frameworks/ which means that executables compiled - # on 10.8 and newer won't run on 10.7 and older because they can't find - # the library. Fortunately, 10.8 and later leave a symlink behind, so - # the old location still works. So we need our executables to contain - # an LC_LOAD_DYLIB pointing at the old directory instead of the new - # one. - # - return if ($app_dir =~ m@-iphone@s); - my ($dir, $name) = ($app_dir =~ m@^(.*)/([^/]+)\.(app|saver)$@s); - error ("unparsable: $app_dir") unless $name; - my $exe = "$app_dir/Contents/MacOS/$name"; - - my $new = ("/System/Library/Frameworks/CoreText.framework/" . - "Versions/A/CoreText"); - my $old = ("/System/Library/Frameworks/ApplicationServices.framework/" . - "Frameworks/CoreText.framework/Versions/A/CoreText"); - my @cmd = ("install_name_tool", "-change", $new, $old, $exe); - - print STDERR "$progname: exec: " . join(' ', @cmd) . "\n" - if ($verbose > 1); - system (@cmd); - my $exit = $? >> 8; - exit ($exit) if $exit; -} - - sub update($) { my ($app_dir) = @_; @@ -492,9 +443,6 @@ sub update($) { # set_icon ($app_dir); set_thumb ($app_dir); -# enable_gc ($app_dir); - fix_coretext ($app_dir) - unless ($app_dir =~ m@-appletv@s); } diff --git a/OSX/updates.xml b/OSX/updates.xml index a21ed054..79783591 100644 --- a/OSX/updates.xml +++ b/OSX/updates.xml @@ -7,6 +7,18 @@ https://www.jwz.org/xscreensaver/updates.xml Updates to xscreensaver. en + + Version 6.03 + https://www.jwz.org/xscreensaver/xscreensaver-6.03.dmg + • New hack, `mapscroller' (X11 and macOS only).
• `sphereeversion' now has corrugation-mode, and can evert the Earth.
• `glplanet' is higher resolution, and displays time zones.
• `glslideshow' displays relative pathnames again.
• fixed spurious error message in auto-update installer. ]]>
+ Sun, 27 Feb 2022 13:08:45 -0800 + +
Version 6.02 https://www.jwz.org/xscreensaver/xscreensaver-6.02.dmg @@ -31,18 +43,6 @@ length="39207177" type="application/octet-stream" /> - - Version 5.45 - https://www.jwz.org/xscreensaver/xscreensaver-5.45.dmg - • Shader updates to `hypertorus'.
• No more image-loading pause in `glslideshow'.
• BSOD supports GNOME.
• Image loaders support SVG.
• Fixed text loading on 10.15.
• Various bug fixes.]]>
- Mon, 07 Dec 2020 12:27:00 -0800 - -
Version 5.34 https://www.jwz.org/xscreensaver/xscreensaver-5.34.dmg diff --git a/OSX/xscreensaver.xcodeproj/project.pbxproj b/OSX/xscreensaver.xcodeproj/project.pbxproj index 4c05a561..2080cb00 100644 --- a/OSX/xscreensaver.xcodeproj/project.pbxproj +++ b/OSX/xscreensaver.xcodeproj/project.pbxproj @@ -262,6 +262,7 @@ AF777A0F09B660B200EA3033 /* PBXTargetDependency */, AF777A0D09B660B200EA3033 /* PBXTargetDependency */, AF4FD6FF0CE7A4F9005EE58E /* PBXTargetDependency */, + AF6E25CE276C40D70032E38F /* PBXTargetDependency */, AF796D3826E5C25300DA6562 /* PBXTargetDependency */, AFAAE3A5207D6470007A515C /* PBXTargetDependency */, AF777A0B09B660B200EA3033 /* PBXTargetDependency */, @@ -296,6 +297,7 @@ AFCF835C1AF5B683008BB7E1 /* PBXTargetDependency */, AFEE10A91D17E32100AAC8F7 /* PBXTargetDependency */, AF7779E909B660B000EA3033 /* PBXTargetDependency */, + AFAE148F2792774700C62683 /* PBXTargetDependency */, AF7779E709B660B000EA3033 /* PBXTargetDependency */, AF7779E509B660B000EA3033 /* PBXTargetDependency */, AF7779E309B660B000EA3033 /* PBXTargetDependency */, @@ -2206,7 +2208,7 @@ AF568A4126E7060500CCBA38 /* qix.c in Sources */ = {isa = PBXBuildFile; fileRef = AF6425FF09A18A94000F4CD4 /* qix.c */; }; AF568A4226E7060500CCBA38 /* penrose.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD5700C0996B49D00BA26F7 /* penrose.c */; }; AF568A4326E7060500CCBA38 /* polyominoes.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD572800996EF2B00BA26F7 /* polyominoes.c */; }; - AF568A4426E7060500CCBA38 /* rd-bomb.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9757D5099C3EB800B05160 /* rd-bomb.c */; }; + AF568A4426E7060500CCBA38 /* rdbomb.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9757D5099C3EB800B05160 /* rdbomb.c */; }; AF568A4526E7060500CCBA38 /* ripples.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D493E09B53D55006E59CF /* ripples.c */; }; AF568A4626E7060500CCBA38 /* ships.c in Sources */ = {isa = PBXBuildFile; fileRef = AFD9D5BD201E686A0070E99D /* ships.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF568A4726E7060500CCBA38 /* rocks.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975D66099CA16A00B05160 /* rocks.c */; }; @@ -2465,6 +2467,12 @@ AF5ECEC42116B2CC00069433 /* vfeedback.c in Sources */ = {isa = PBXBuildFile; fileRef = AF5ECEC22116B2CC00069433 /* vfeedback.c */; }; AF5ECEC62116B2FE00069433 /* vfeedback.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF5ECEC52116B2FE00069433 /* vfeedback.xml */; }; AF5ECEC72116B2FE00069433 /* vfeedback.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF5ECEC52116B2FE00069433 /* vfeedback.xml */; }; + AF603F4927C9744300EE2206 /* sphereeversion-corrugations.c in Sources */ = {isa = PBXBuildFile; fileRef = AF603F4727C9744300EE2206 /* sphereeversion-corrugations.c */; }; + AF603F4A27C9744300EE2206 /* sphereeversion-corrugations.c in Sources */ = {isa = PBXBuildFile; fileRef = AF603F4727C9744300EE2206 /* sphereeversion-corrugations.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; + AF603F4B27C9744300EE2206 /* sphereeversion-corrugations.c in Sources */ = {isa = PBXBuildFile; fileRef = AF603F4727C9744300EE2206 /* sphereeversion-corrugations.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; + AF603F4C27C9744300EE2206 /* sphereeversion-analytic.c in Sources */ = {isa = PBXBuildFile; fileRef = AF603F4827C9744300EE2206 /* sphereeversion-analytic.c */; }; + AF603F4D27C9744300EE2206 /* sphereeversion-analytic.c in Sources */ = {isa = PBXBuildFile; fileRef = AF603F4827C9744300EE2206 /* sphereeversion-analytic.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; + AF603F4E27C9744300EE2206 /* sphereeversion-analytic.c in Sources */ = {isa = PBXBuildFile; fileRef = AF603F4827C9744300EE2206 /* sphereeversion-analytic.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF6048FB157C07C600CA21E4 /* jwzgles.c in Sources */ = {isa = PBXBuildFile; fileRef = AF6048F8157C07C600CA21E4 /* jwzgles.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AF6048FC157C07C600CA21E4 /* jwzgles.h in Headers */ = {isa = PBXBuildFile; fileRef = AF6048F9157C07C600CA21E4 /* jwzgles.h */; }; AF6048FD157C07C600CA21E4 /* jwzglesI.h in Headers */ = {isa = PBXBuildFile; fileRef = AF6048FA157C07C600CA21E4 /* jwzglesI.h */; }; @@ -2654,6 +2662,17 @@ AF6C6D8E226AE6370065A748 /* gravitywell.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF6C6D8D226AE6370065A748 /* gravitywell.xml */; }; AF6C6D8F226AE6370065A748 /* gravitywell.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF6C6D8D226AE6370065A748 /* gravitywell.xml */; }; AF6C6D92226AE6CE0065A748 /* gravitywell.c in Sources */ = {isa = PBXBuildFile; fileRef = AF6C6D8B226AE6120065A748 /* gravitywell.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; + AF6E25B9276C3F030032E38F /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; + AF6E25BB276C3F030032E38F /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; + AF6E25BC276C3F030032E38F /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; + AF6E25BD276C3F030032E38F /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; + AF6E25BE276C3F030032E38F /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; + AF6E25BF276C3F030032E38F /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; + AF6E25C0276C3F030032E38F /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; + AF6E25C1276C3F030032E38F /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; + AF6E25CB276C402F0032E38F /* mapscroller.c in Sources */ = {isa = PBXBuildFile; fileRef = AF6E25C9276C402E0032E38F /* mapscroller.c */; }; + AF6E25CC276C402F0032E38F /* mapscroller.xml in Resources */ = {isa = PBXBuildFile; fileRef = AF6E25CA276C402F0032E38F /* mapscroller.xml */; }; + AF6E25D0276C49FF0032E38F /* mapscroller.pl in Resources */ = {isa = PBXBuildFile; fileRef = AF6E25CF276C49FF0032E38F /* mapscroller.pl */; }; AF70D21522A59A080004BAAD /* gallant12x22.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AF70D21422A59A080004BAAD /* gallant12x22.ttf */; }; AF70D21622A5A0840004BAAD /* gallant12x22.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AF70D21422A59A080004BAAD /* gallant12x22.ttf */; }; AF73FF211A08AB9400E485E9 /* iSaverRunner57t.png in Resources */ = {isa = PBXBuildFile; fileRef = AF73FF201A08AB9400E485E9 /* iSaverRunner57t.png */; }; @@ -3076,7 +3095,7 @@ AF9189DA158FC334002B5D1E /* popsquares.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47727E099D5808001F091E /* popsquares.c */; }; AF9189DB158FC334002B5D1E /* pyro.c in Sources */ = {isa = PBXBuildFile; fileRef = AF47759C099D9CA3001F091E /* pyro.c */; }; AF9189DC158FC334002B5D1E /* qix.c in Sources */ = {isa = PBXBuildFile; fileRef = AF6425FF09A18A94000F4CD4 /* qix.c */; }; - AF9189DD158FC334002B5D1E /* rd-bomb.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9757D5099C3EB800B05160 /* rd-bomb.c */; }; + AF9189DD158FC334002B5D1E /* rdbomb.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9757D5099C3EB800B05160 /* rdbomb.c */; }; AF9189DE158FC334002B5D1E /* ripples.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D493E09B53D55006E59CF /* ripples.c */; }; AF9189DF158FC35D002B5D1E /* rocks.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975D66099CA16A00B05160 /* rocks.c */; }; AF9189E0158FC35D002B5D1E /* rorschach.c in Sources */ = {isa = PBXBuildFile; fileRef = AFE1FD620981E40800F7970E /* rorschach.c */; }; @@ -3490,7 +3509,7 @@ AF975788099C378B00B05160 /* moire.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258E50988A469000655EE /* moire.xml */; }; AF97578A099C37A500B05160 /* moire.c in Sources */ = {isa = PBXBuildFile; fileRef = AF975789099C37A500B05160 /* moire.c */; }; AF9757C8099C3E6300B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; - AF9757D6099C3EB800B05160 /* rd-bomb.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9757D5099C3EB800B05160 /* rd-bomb.c */; }; + AF9757D6099C3EB800B05160 /* rdbomb.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9757D5099C3EB800B05160 /* rdbomb.c */; }; AF97580E099C41D500B05160 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AF97581B099C423600B05160 /* xflame.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC259370988A469000655EE /* xflame.xml */; }; AF975830099C427500B05160 /* xflame.c in Sources */ = {isa = PBXBuildFile; fileRef = AF97582F099C427500B05160 /* xflame.c */; }; @@ -3653,7 +3672,6 @@ AF9D4DF509B5BB19006E59CF /* apple2.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4DD309B5B990006E59CF /* apple2.c */; }; AF9D4E0409B5BC85006E59CF /* apple2.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC2586F0988A468000655EE /* apple2.xml */; }; AF9D4E0609B5BC9D006E59CF /* apple2-main.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9D4E0509B5BC9D006E59CF /* apple2-main.c */; }; - AF9E7EC9190F4C4000A8B01F /* enable_gc.c in Sources */ = {isa = PBXBuildFile; fileRef = AF9E7EC8190F4C4000A8B01F /* enable_gc.c */; }; AFA0B122241CE69E0071E35D /* dangerball.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC258920988A468000655EE /* dangerball.xml */; }; AFA0B125241CE69E0071E35D /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFA0B127241CE69E0071E35D /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; @@ -3879,6 +3897,20 @@ AFADD34424B67204005456DC /* sphereeversion.c in Sources */ = {isa = PBXBuildFile; fileRef = AFADD34224B67204005456DC /* sphereeversion.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFADD34624B67223005456DC /* sphereeversion.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFADD34524B67223005456DC /* sphereeversion.xml */; }; AFADD34724B67223005456DC /* sphereeversion.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFADD34524B67223005456DC /* sphereeversion.xml */; }; + AFAE1476279275BE00C62683 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; + AFAE1478279275BE00C62683 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; + AFAE1479279275BE00C62683 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; + AFAE147A279275BE00C62683 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2C31E515C0F7FE007A6896 /* QuartzCore.framework */; }; + AFAE147B279275BE00C62683 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; + AFAE147C279275BE00C62683 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48112B0990A2C700FB32B8 /* Carbon.framework */; }; + AFAE147D279275BE00C62683 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; + AFAE147E279275BE00C62683 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; + AFAE1488279276BC00C62683 /* squirtorus.c in Sources */ = {isa = PBXBuildFile; fileRef = AFAE1486279276BB00C62683 /* squirtorus.c */; }; + AFAE1489279276BC00C62683 /* squirtorus.c in Sources */ = {isa = PBXBuildFile; fileRef = AFAE1486279276BB00C62683 /* squirtorus.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; + AFAE148A279276BC00C62683 /* squirtorus.c in Sources */ = {isa = PBXBuildFile; fileRef = AFAE1486279276BB00C62683 /* squirtorus.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; + AFAE148B279276BC00C62683 /* squirtorus.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFAE1487279276BC00C62683 /* squirtorus.xml */; }; + AFAE148C279276BC00C62683 /* squirtorus.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFAE1487279276BC00C62683 /* squirtorus.xml */; }; + AFAE148D279276BC00C62683 /* squirtorus.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFAE1487279276BC00C62683 /* squirtorus.xml */; }; AFB591AE178B812C00EA4005 /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFB591B0178B812C00EA4005 /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFB591B1178B812C00EA4005 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; @@ -3933,6 +3965,9 @@ AFC211950E4E30C800D87B6E /* teapot.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC211930E4E30C800D87B6E /* teapot.c */; }; AFC43E7C1C6AA78800C89999 /* OCRAStd.otf in Resources */ = {isa = PBXBuildFile; fileRef = AFEC68361BD6CA85004C1B64 /* OCRAStd.otf */; }; AFC523C31FED9420001C300A /* xscreensaver-getimage-file in Resources */ = {isa = PBXBuildFile; fileRef = AF0FAF1209CA712600EE1051 /* xscreensaver-getimage-file */; }; + AFC5262E27C9CB3300ECED0B /* timezones.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC5262D27C9CB3300ECED0B /* timezones.c */; }; + AFC5262F27C9CB3300ECED0B /* timezones.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC5262D27C9CB3300ECED0B /* timezones.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; + AFC5263027C9CB3300ECED0B /* timezones.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC5262D27C9CB3300ECED0B /* timezones.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFC5CFDD2044AA23004CEB5E /* XScreenSaverSubclass.m in Sources */ = {isa = PBXBuildFile; fileRef = AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */; }; AFC5CFDF2044AA23004CEB5E /* libjwxyz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4808C1098C3B6C00FB32B8 /* libjwxyz.a */; }; AFC5CFE02044AA23004CEB5E /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF976ED30989BF59001F8B92 /* ScreenSaver.framework */; }; @@ -3942,7 +3977,7 @@ AFC5CFE42044AA23004CEB5E /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEE0BC611A6B0D6200C098BF /* OpenGL.framework */; }; AFC5CFE52044AA23004CEB5E /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AF78369617DB9F25003B9FC0 /* libz.dylib */; }; AFC5CFEF2044AB04004CEB5E /* quickhull.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC5CFED2044AB03004CEB5E /* quickhull.c */; }; - AFC5CFF02044AB04004CEB5E /* quickhull.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC5CFED2044AB03004CEB5E /* quickhull.c */; }; + AFC5CFF02044AB04004CEB5E /* quickhull.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC5CFED2044AB03004CEB5E /* quickhull.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFC5CFF12044AB04004CEB5E /* crumbler.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC5CFEE2044AB03004CEB5E /* crumbler.c */; }; AFC5CFF22044AB04004CEB5E /* crumbler.c in Sources */ = {isa = PBXBuildFile; fileRef = AFC5CFEE2044AB03004CEB5E /* crumbler.c */; settings = {COMPILER_FLAGS = "-DUSE_GL"; }; }; AFC5CFF42044AB28004CEB5E /* crumbler.xml in Resources */ = {isa = PBXBuildFile; fileRef = AFC5CFF32044AB27004CEB5E /* crumbler.xml */; }; @@ -5641,6 +5676,20 @@ remoteGlobalIDString = AF6C6D74226AE4FC0065A748; remoteInfo = GravityWell; }; + AF6E25B4276C3F030032E38F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; + remoteInfo = jwxyz; + }; + AF6E25CD276C40D70032E38F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AF6E25B2276C3F030032E38F; + remoteInfo = MapScroller; + }; AF714E4E105613410046AB1D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; @@ -7853,6 +7902,20 @@ remoteGlobalIDString = AFADD32B24B67100005456DC; remoteInfo = SphereEversion; }; + AFAE1471279275BE00C62683 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AF4808C0098C3B6C00FB32B8; + remoteInfo = jwxyz; + }; + AFAE148E2792774700C62683 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = AFAE146F279275BE00C62683; + remoteInfo = Squirtorus; + }; AFB581AF102F363300342B11 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; @@ -8461,15 +8524,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - AF9E7EBD190F4C1B00A8B01F /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = /usr/share/man/man1/; - dstSubfolderSpec = 0; - files = ( - ); - runOnlyForDeploymentPostprocessing = 1; - }; AFB9B5C024269AF900A5740D /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -8786,6 +8840,8 @@ AF5ECEC02116B1A400069433 /* VFeedback.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = VFeedback.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF5ECEC22116B2CC00069433 /* vfeedback.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vfeedback.c; path = hacks/vfeedback.c; sourceTree = ""; }; AF5ECEC52116B2FE00069433 /* vfeedback.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = vfeedback.xml; sourceTree = ""; }; + AF603F4727C9744300EE2206 /* sphereeversion-corrugations.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "sphereeversion-corrugations.c"; path = "hacks/glx/sphereeversion-corrugations.c"; sourceTree = ""; }; + AF603F4827C9744300EE2206 /* sphereeversion-analytic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "sphereeversion-analytic.c"; path = "hacks/glx/sphereeversion-analytic.c"; sourceTree = ""; }; AF6048F8157C07C600CA21E4 /* jwzgles.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jwzgles.c; path = ../jwxyz/jwzgles.c; sourceTree = ""; }; AF6048F9157C07C600CA21E4 /* jwzgles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jwzgles.h; path = ../jwxyz/jwzgles.h; sourceTree = ""; }; AF6048FA157C07C600CA21E4 /* jwzglesI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jwzglesI.h; path = ../jwxyz/jwzglesI.h; sourceTree = ""; }; @@ -8844,6 +8900,10 @@ AF6C6D89226AE4FC0065A748 /* GravityWell.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GravityWell.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF6C6D8B226AE6120065A748 /* gravitywell.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = gravitywell.c; path = hacks/glx/gravitywell.c; sourceTree = ""; }; AF6C6D8D226AE6370065A748 /* gravitywell.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = gravitywell.xml; sourceTree = ""; }; + AF6E25C7276C3F030032E38F /* MapScroller.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MapScroller.saver; sourceTree = BUILT_PRODUCTS_DIR; }; + AF6E25C9276C402E0032E38F /* mapscroller.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = mapscroller.c; path = hacks/glx/mapscroller.c; sourceTree = ""; }; + AF6E25CA276C402F0032E38F /* mapscroller.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = mapscroller.xml; sourceTree = ""; }; + AF6E25CF276C49FF0032E38F /* mapscroller.pl */ = {isa = PBXFileReference; lastKnownFileType = text.script.perl; name = mapscroller.pl; path = hacks/glx/mapscroller.pl; sourceTree = ""; }; AF70D21422A59A080004BAAD /* gallant12x22.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = gallant12x22.ttf; path = ../hacks/fonts/gallant12x22.ttf; sourceTree = ""; }; AF73FF201A08AB9400E485E9 /* iSaverRunner57t.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = iSaverRunner57t.png; sourceTree = ""; }; AF73FF361A09877F00E485E9 /* BinaryRing.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BinaryRing.saver; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -8933,7 +8993,7 @@ AF975785099C374A00B05160 /* Moire.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Moire.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF975789099C37A500B05160 /* moire.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = moire.c; path = hacks/moire.c; sourceTree = ""; }; AF9757D2099C3E6300B05160 /* RDbomb.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RDbomb.saver; sourceTree = BUILT_PRODUCTS_DIR; }; - AF9757D5099C3EB800B05160 /* rd-bomb.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "rd-bomb.c"; path = "hacks/rd-bomb.c"; sourceTree = ""; }; + AF9757D5099C3EB800B05160 /* rdbomb.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = rdbomb.c; path = hacks/rdbomb.c; sourceTree = ""; }; AF975818099C41D500B05160 /* XFlame.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = XFlame.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF97582F099C427500B05160 /* xflame.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = xflame.c; path = hacks/xflame.c; sourceTree = ""; }; AF975875099C475900B05160 /* ShadeBobs.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ShadeBobs.saver; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -9001,8 +9061,6 @@ AF9D4DD309B5B990006E59CF /* apple2.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = apple2.c; path = hacks/apple2.c; sourceTree = ""; }; AF9D4DFE09B5BB19006E59CF /* Apple2.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Apple2.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AF9D4E0509B5BC9D006E59CF /* apple2-main.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "apple2-main.c"; path = "hacks/apple2-main.c"; sourceTree = ""; }; - AF9E7EBF190F4C1B00A8B01F /* enable_gc */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = enable_gc; sourceTree = BUILT_PRODUCTS_DIR; }; - AF9E7EC8190F4C4000A8B01F /* enable_gc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = enable_gc.c; sourceTree = ""; }; AFA0B133241CE69E0071E35D /* Gibson.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Gibson.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFA0B135241CE7B60071E35D /* gibson.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = gibson.c; path = hacks/glx/gibson.c; sourceTree = ""; }; AFA0B138241CE7E10071E35D /* gibson.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = gibson.xml; sourceTree = ""; }; @@ -9187,6 +9245,9 @@ AFADD34024B67100005456DC /* SphereEversion.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SphereEversion.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFADD34224B67204005456DC /* sphereeversion.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sphereeversion.c; path = hacks/glx/sphereeversion.c; sourceTree = ""; }; AFADD34524B67223005456DC /* sphereeversion.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = sphereeversion.xml; sourceTree = ""; }; + AFAE1484279275BE00C62683 /* Squirtorus.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Squirtorus.saver; sourceTree = BUILT_PRODUCTS_DIR; }; + AFAE1486279276BB00C62683 /* squirtorus.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = squirtorus.c; path = hacks/glx/squirtorus.c; sourceTree = ""; }; + AFAE1487279276BC00C62683 /* squirtorus.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = squirtorus.xml; sourceTree = ""; }; AFB591BA178B812C00EA4005 /* Hexadrop.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Hexadrop.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFB591BC178B81E600EA4005 /* hexadrop.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = hexadrop.xml; sourceTree = ""; }; AFB591BD178B81E600EA4005 /* hexadrop.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = hexadrop.c; path = hacks/hexadrop.c; sourceTree = ""; }; @@ -9415,6 +9476,7 @@ AFC25B5E0988BA63000655EE /* deco.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = deco.c; path = hacks/deco.c; sourceTree = ""; }; AFC25B990988BC08000655EE /* colors.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = colors.c; path = utils/colors.c; sourceTree = ""; }; AFC25B9A0988BC08000655EE /* colors.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = colors.h; path = utils/colors.h; sourceTree = ""; }; + AFC5262D27C9CB3300ECED0B /* timezones.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = timezones.c; path = hacks/glx/timezones.c; sourceTree = ""; }; AFC5CFEB2044AA23004CEB5E /* Crumbler.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Crumbler.saver; sourceTree = BUILT_PRODUCTS_DIR; }; AFC5CFED2044AB03004CEB5E /* quickhull.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = quickhull.c; path = hacks/glx/quickhull.c; sourceTree = ""; }; AFC5CFEE2044AB03004CEB5E /* crumbler.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = crumbler.c; path = hacks/glx/crumbler.c; sourceTree = ""; }; @@ -11007,6 +11069,20 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AF6E25BA276C3F030032E38F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + AF6E25BB276C3F030032E38F /* libjwxyz.a in Frameworks */, + AF6E25BC276C3F030032E38F /* ScreenSaver.framework in Frameworks */, + AF6E25BD276C3F030032E38F /* QuartzCore.framework in Frameworks */, + AF6E25BE276C3F030032E38F /* Cocoa.framework in Frameworks */, + AF6E25BF276C3F030032E38F /* Carbon.framework in Frameworks */, + AF6E25C0276C3F030032E38F /* OpenGL.framework in Frameworks */, + AF6E25C1276C3F030032E38F /* libz.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; AF73FF2A1A09877F00E485E9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -11819,13 +11895,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - AF9E7EBC190F4C1B00A8B01F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; AFA0B126241CE69E0071E35D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -12679,6 +12748,20 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AFAE1477279275BE00C62683 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + AFAE1478279275BE00C62683 /* libjwxyz.a in Frameworks */, + AFAE1479279275BE00C62683 /* ScreenSaver.framework in Frameworks */, + AFAE147A279275BE00C62683 /* QuartzCore.framework in Frameworks */, + AFAE147B279275BE00C62683 /* Cocoa.framework in Frameworks */, + AFAE147C279275BE00C62683 /* Carbon.framework in Frameworks */, + AFAE147D279275BE00C62683 /* OpenGL.framework in Frameworks */, + AFAE147E279275BE00C62683 /* libz.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; AFB591AF178B812C00EA4005 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -13507,7 +13590,6 @@ AF9CC7A0099580E70075E99B /* XScreenSaverSubclass.m */, AFC254C409882C97000655EE /* XScreenSaverView.h */, AFC254C509882C97000655EE /* XScreenSaverView.m */, - AF9E7EC8190F4C4000A8B01F /* enable_gc.c */, ); name = libjwxyz; sourceTree = ""; @@ -13746,7 +13828,6 @@ AFB591BA178B812C00EA4005 /* Hexadrop.saver */, AFF3C9FB17CCAC440028F240 /* Geodesic.saver */, AF1AD9E218500F9F00932759 /* XScreenSaverUpdater.app */, - AF9E7EBF190F4C1B00A8B01F /* enable_gc */, AFFAB32919158CE40020F021 /* ProjectivePlane.saver */, AF68A49219196CF800D41CD1 /* Tessellimage.saver */, AF39E296198A11F60064A58D /* WindupRobot.saver */, @@ -13792,6 +13873,8 @@ AF796D2F26E5C10700DA6562 /* Marbling.saver */, AF568B3026E7060500CCBA38 /* XScreenSaver-tvOS.app */, AF69E206270BA54600358595 /* BinaryHorizon.saver */, + AF6E25C7276C3F030032E38F /* MapScroller.saver */, + AFAE1484279275BE00C62683 /* Squirtorus.saver */, ); name = Products; path = ..; @@ -13996,7 +14079,7 @@ AF47727E099D5808001F091E /* popsquares.c */, AF47759C099D9CA3001F091E /* pyro.c */, AF6425FF09A18A94000F4CD4 /* qix.c */, - AF9757D5099C3EB800B05160 /* rd-bomb.c */, + AF9757D5099C3EB800B05160 /* rdbomb.c */, AF9D493E09B53D55006E59CF /* ripples.c */, AF975D66099CA16A00B05160 /* rocks.c */, AFE1FD620981E40800F7970E /* rorschach.c */, @@ -14184,6 +14267,7 @@ AFA5600E09936CB300F3E977 /* glknots.c */, AFA55F870993648500F3E977 /* glmatrix.c */, AFA55B2109933E4A00F3E977 /* glplanet.c */, + AFC5262D27C9CB3300ECED0B /* timezones.c */, AF48E1660A0C268500F94CF9 /* glschool.c */, AF48E1670A0C268500F94CF9 /* glschool.h */, AF48E1620A0C268400F94CF9 /* glschool_alg.c */, @@ -14216,6 +14300,8 @@ AFF1BA0E19A96D8B0016A88D /* lament_model.c */, AFA55DDD09935DB600F3E977 /* lavalite.c */, AF4FD7000CE7A577005EE58E /* lockward.c */, + AF6E25C9276C402E0032E38F /* mapscroller.c */, + AF6E25CF276C49FF0032E38F /* mapscroller.pl */, AFA55DE109935DFB00F3E977 /* marching.c */, AFA55DE209935DFB00F3E977 /* marching.h */, AFAAE39E207D6420007A515C /* maze3d.c */, @@ -14265,6 +14351,8 @@ AFE30C000E52B1DC00CCF4A5 /* sonar-sim.c */, AFE30C010E52B1DC00CCF4A5 /* sonar.c */, AFADD34224B67204005456DC /* sphereeversion.c */, + AF603F4827C9744300EE2206 /* sphereeversion-analytic.c */, + AF603F4727C9744300EE2206 /* sphereeversion-corrugations.c */, AFA55D940993590F00F3E977 /* spheremonics.c */, AFCF83541AF5B5FD008BB7E1 /* splitflap.c */, AFCF83531AF5B5FD008BB7E1 /* splitflap_obj.c */, @@ -14272,6 +14360,7 @@ AFA55A470993351F00F3E977 /* sproingies.c */, AF7778C009B65C0F00EA3033 /* sproingies.h */, AFA55A480993351F00F3E977 /* sproingiewrap.c */, + AFAE1486279276BB00C62683 /* squirtorus.c */, AFA55A1A0993345900F3E977 /* stairs.c */, AF77782809B650FF00EA3033 /* starwars.c */, AF77782909B650FF00EA3033 /* starwars.txt */, @@ -14475,6 +14564,7 @@ AF4FD7020CE7A5BC005EE58E /* lockward.xml */, AFC258DD0988A468000655EE /* loop.xml */, AF0DCA370C4C74B700D76972 /* m6502.xml */, + AF6E25CA276C402F0032E38F /* mapscroller.xml */, AF796D3426E5C21C00DA6562 /* marbling.xml */, AFC258DE0988A468000655EE /* maze.xml */, AFAAE3A1207D6438007A515C /* maze3d.xml */, @@ -14547,6 +14637,7 @@ AFC259150988A469000655EE /* spotlight.xml */, AFC259160988A469000655EE /* sproingies.xml */, AFC259170988A469000655EE /* squiral.xml */, + AFAE1487279276BC00C62683 /* squirtorus.xml */, AFC259190988A469000655EE /* stairs.xml */, AFC2591A0988A469000655EE /* starfish.xml */, AFC2591B0988A469000655EE /* starwars.xml */, @@ -16771,6 +16862,26 @@ productReference = AF6C6D89226AE4FC0065A748 /* GravityWell.saver */; productType = "com.apple.product-type.bundle"; }; + AF6E25B2276C3F030032E38F /* MapScroller */ = { + isa = PBXNativeTarget; + buildConfigurationList = AF6E25C4276C3F030032E38F /* Build configuration list for PBXNativeTarget "MapScroller" */; + buildPhases = ( + AF6E25B5276C3F030032E38F /* Resources */, + AF6E25B7276C3F030032E38F /* Sources */, + AF6E25BA276C3F030032E38F /* Frameworks */, + AF6E25C2276C3F030032E38F /* Rez */, + AF6E25C3276C3F030032E38F /* Run Update Info Plist */, + ); + buildRules = ( + ); + dependencies = ( + AF6E25B3276C3F030032E38F /* PBXTargetDependency */, + ); + name = MapScroller; + productName = DangerBall; + productReference = AF6E25C7276C3F030032E38F /* MapScroller.saver */; + productType = "com.apple.product-type.bundle"; + }; AF73FF221A09877F00E485E9 /* BinaryRing */ = { isa = PBXNativeTarget; buildConfigurationList = AF73FF331A09877F00E485E9 /* Build configuration list for PBXNativeTarget "BinaryRing" */; @@ -17934,23 +18045,6 @@ productReference = AF9D4DFE09B5BB19006E59CF /* Apple2.saver */; productType = "com.apple.product-type.bundle"; }; - AF9E7EBE190F4C1B00A8B01F /* enable_gc */ = { - isa = PBXNativeTarget; - buildConfigurationList = AF9E7EC5190F4C1C00A8B01F /* Build configuration list for PBXNativeTarget "enable_gc" */; - buildPhases = ( - AF9E7EBB190F4C1B00A8B01F /* Sources */, - AF9E7EBC190F4C1B00A8B01F /* Frameworks */, - AF9E7EBD190F4C1B00A8B01F /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = enable_gc; - productName = enable_gc; - productReference = AF9E7EBF190F4C1B00A8B01F /* enable_gc */; - productType = "com.apple.product-type.tool"; - }; AFA0B11E241CE69E0071E35D /* Gibson */ = { isa = PBXNativeTarget; buildConfigurationList = AFA0B130241CE69E0071E35D /* Build configuration list for PBXNativeTarget "Gibson" */; @@ -19172,6 +19266,26 @@ productReference = AFADD34024B67100005456DC /* SphereEversion.saver */; productType = "com.apple.product-type.bundle"; }; + AFAE146F279275BE00C62683 /* Squirtorus */ = { + isa = PBXNativeTarget; + buildConfigurationList = AFAE1481279275BE00C62683 /* Build configuration list for PBXNativeTarget "Squirtorus" */; + buildPhases = ( + AFAE1472279275BE00C62683 /* Resources */, + AFAE1474279275BE00C62683 /* Sources */, + AFAE1477279275BE00C62683 /* Frameworks */, + AFAE147F279275BE00C62683 /* Rez */, + AFAE1480279275BE00C62683 /* Run Update Info Plist */, + ); + buildRules = ( + ); + dependencies = ( + AFAE1470279275BE00C62683 /* PBXTargetDependency */, + ); + name = Squirtorus; + productName = DangerBall; + productReference = AFAE1484279275BE00C62683 /* Squirtorus.saver */; + productType = "com.apple.product-type.bundle"; + }; AFB591A7178B812C00EA4005 /* Hexadrop */ = { isa = PBXNativeTarget; buildConfigurationList = AFB591B7178B812C00EA4005 /* Build configuration list for PBXNativeTarget "Hexadrop" */; @@ -20323,7 +20437,7 @@ 29B97313FDCFA39411CA2CEA /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1300; + LastUpgradeCheck = 1320; TargetAttributes = { AF08398F09930B6B00277BE9 = { DevelopmentTeam = 4627ATJELP; @@ -20643,6 +20757,9 @@ AF6C6D74226AE4FC0065A748 = { DevelopmentTeam = 4627ATJELP; }; + AF6E25B2276C3F030032E38F = { + DevelopmentTeam = 4627ATJELP; + }; AF73FF221A09877F00E485E9 = { DevelopmentTeam = 4627ATJELP; }; @@ -20817,9 +20934,6 @@ AF9D4DEC09B5BB19006E59CF = { DevelopmentTeam = 4627ATJELP; }; - AF9E7EBE190F4C1B00A8B01F = { - DevelopmentTeam = 4627ATJELP; - }; AFA0B11E241CE69E0071E35D = { DevelopmentTeam = 4627ATJELP; }; @@ -21012,6 +21126,9 @@ AFADD32B24B67100005456DC = { DevelopmentTeam = 4627ATJELP; }; + AFAE146F279275BE00C62683 = { + DevelopmentTeam = 4627ATJELP; + }; AFB591A7178B812C00EA4005 = { DevelopmentTeam = 4627ATJELP; }; @@ -21412,6 +21529,7 @@ AFA55A790993364300F3E977 /* Lament */, AFA55DC809935D7000F3E977 /* Lavalite */, AF4FD6E60CE7A486005EE58E /* Lockward */, + AF6E25B2276C3F030032E38F /* MapScroller */, AF796D1A26E5C10700DA6562 /* Marbling */, AFAAE387207D6343007A515C /* Maze3D */, AFA55BE40993429100F3E977 /* Menger */, @@ -21447,6 +21565,7 @@ AFCF833B1AF5B515008BB7E1 /* SplitFlap */, AFEE108B1D17E20B00AAC8F7 /* Splodesic */, AFA55A20099334A000F3E977 /* Sproingies */, + AFAE146F279275BE00C62683 /* Squirtorus */, AFA55A030993340300F3E977 /* Stairs */, AF77781009B6504400EA3033 /* StarWars */, AF7777A809B64B2600EA3033 /* StonerView */, @@ -21485,7 +21604,6 @@ AFD56F0B0996AAFA00BA26F7 /* Vines */, AF477208099D4EE8001F091E /* Whirlygig */, AFD5709B0996B88E00BA26F7 /* Worm */, - AF9E7EBE190F4C1B00A8B01F /* enable_gc */, AF9771D60989DC4A001F8B92 /* SaverTester */, AF918977158FC00A002B5D1E /* XScreenSaver-iOS */, AF5688D826E7060500CCBA38 /* XScreenSaver-tvOS */, @@ -22345,6 +22463,7 @@ AF5689B726E7060500CCBA38 /* spotlight.xml in Resources */, AF5689B826E7060500CCBA38 /* sproingies.xml in Resources */, AF5689B926E7060500CCBA38 /* squiral.xml in Resources */, + AFAE148D279276BC00C62683 /* squirtorus.xml in Resources */, AF5689BA26E7060500CCBA38 /* stairs.xml in Resources */, AF5689BB26E7060500CCBA38 /* starfish.xml in Resources */, AF5689BC26E7060500CCBA38 /* starwars.xml in Resources */, @@ -22563,6 +22682,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AF6E25B5276C3F030032E38F /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AF6E25CC276C402F0032E38F /* mapscroller.xml in Resources */, + AF6E25D0276C49FF0032E38F /* mapscroller.pl in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; AF73FF251A09877F00E485E9 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -22970,6 +23098,7 @@ AF918B6B158FC53E002B5D1E /* spotlight.xml in Resources */, AF918B6C158FC53E002B5D1E /* sproingies.xml in Resources */, AF918B6D158FC53E002B5D1E /* squiral.xml in Resources */, + AFAE148C279276BC00C62683 /* squirtorus.xml in Resources */, AF918B6E158FC53E002B5D1E /* stairs.xml in Resources */, AF918B6F158FC53E002B5D1E /* starfish.xml in Resources */, AF918B70158FC53E002B5D1E /* starwars.xml in Resources */, @@ -23793,6 +23922,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AFAE1472279275BE00C62683 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AFAE148B279276BC00C62683 /* squirtorus.xml in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; AFB591AA178B812C00EA4005 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -24916,6 +25053,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AF6E25C2276C3F030032E38F /* Rez */ = { + isa = PBXRezBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; AF73FF311A09877F00E485E9 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; @@ -25728,6 +25872,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AFAE147F279275BE00C62683 /* Rez */ = { + isa = PBXRezBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; AFB591B5178B812C00EA4005 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; @@ -26196,7 +26347,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; + shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX\n"; showEnvVarsInLog = 0; }; AF1B0FB81D7AB4740011DBE4 /* Run Update Info Plist */ = { @@ -26796,6 +26947,22 @@ shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; + AF6E25C3276C3F030032E38F /* Run Update Info Plist */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}", + ); + name = "Run Update Info Plist"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; + showEnvVarsInLog = 0; + }; AF73FF321A09877F00E485E9 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -26825,7 +26992,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; + shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX\n"; showEnvVarsInLog = 0; }; AF78D185142DD8F3002AAF77 /* Run Update Info Plist */ = { @@ -30134,6 +30301,22 @@ shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; showEnvVarsInLog = 0; }; + AFAE1480279275BE00C62683 /* Run Update Info Plist */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}", + ); + name = "Run Update Info Plist"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; + showEnvVarsInLog = 0; + }; AFB591B6178B812C00EA4005 /* Run Update Info Plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -30273,7 +30456,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX"; + shellScript = "$SOURCE_ROOT/update-info-plist.pl -q $BUILT_PRODUCTS_DIR/$PRODUCT_NAME$WRAPPER_SUFFIX\n"; showEnvVarsInLog = 0; }; AFCCCBC709C03AAF00353F4D /* Run Update Info Plist */ = { @@ -31516,7 +31699,6 @@ AF568A0926E7060500CCBA38 /* discrete.c in Sources */, AF568A0A26E7060500CCBA38 /* distort.c in Sources */, AF568A0B26E7060500CCBA38 /* drift.c in Sources */, - AF568A0C26E7060500CCBA38 /* dymaxionmap-coords.c in Sources */, AF568A0D26E7060500CCBA38 /* epicycle.c in Sources */, AF568A0E26E7060500CCBA38 /* eruption.c in Sources */, AF568A0F26E7060500CCBA38 /* euler2d.c in Sources */, @@ -31573,7 +31755,7 @@ AF568A4126E7060500CCBA38 /* qix.c in Sources */, AF568A4226E7060500CCBA38 /* penrose.c in Sources */, AF568A4326E7060500CCBA38 /* polyominoes.c in Sources */, - AF568A4426E7060500CCBA38 /* rd-bomb.c in Sources */, + AF568A4426E7060500CCBA38 /* rdbomb.c in Sources */, AF568A4526E7060500CCBA38 /* ripples.c in Sources */, AF568A4626E7060500CCBA38 /* ships.c in Sources */, AF568A4726E7060500CCBA38 /* rocks.c in Sources */, @@ -31656,6 +31838,7 @@ AF568A9426E7060500CCBA38 /* dnalogo.c in Sources */, AF568A9526E7060500CCBA38 /* dolphin.c in Sources */, AF568A9626E7060500CCBA38 /* dymaxionmap.c in Sources */, + AF568A0C26E7060500CCBA38 /* dymaxionmap-coords.c in Sources */, AF568A9726E7060500CCBA38 /* dropshadow.c in Sources */, AF568A9826E7060500CCBA38 /* endgame.c in Sources */, AF568A9926E7060500CCBA38 /* energystream.c in Sources */, @@ -31707,8 +31890,8 @@ AF568AC826E7060500CCBA38 /* maze3d.c in Sources */, AF568AC926E7060500CCBA38 /* menger.c in Sources */, AF568ACA26E7060500CCBA38 /* mirrorblob.c in Sources */, - AF568ACB26E7060500CCBA38 /* moebius.c in Sources */, AF568ACC26E7060500CCBA38 /* geodesic.c in Sources */, + AF568ACB26E7060500CCBA38 /* moebius.c in Sources */, AF568ACD26E7060500CCBA38 /* moebiusgears.c in Sources */, AF568ACE26E7060500CCBA38 /* molecule.c in Sources */, AF568ACF26E7060500CCBA38 /* morph3d.c in Sources */, @@ -31750,12 +31933,15 @@ AF568AF326E7060500CCBA38 /* sonar-sim.c in Sources */, AF568AF426E7060500CCBA38 /* sonar.c in Sources */, AF568AF526E7060500CCBA38 /* sphereeversion.c in Sources */, + AF603F4E27C9744300EE2206 /* sphereeversion-analytic.c in Sources */, + AF603F4B27C9744300EE2206 /* sphereeversion-corrugations.c in Sources */, AF568AF626E7060500CCBA38 /* spheremonics.c in Sources */, AF568AF726E7060500CCBA38 /* splitflap.c in Sources */, AF568AF826E7060500CCBA38 /* splitflap_obj.c in Sources */, AF568AF926E7060500CCBA38 /* splodesic.c in Sources */, AF568AFA26E7060500CCBA38 /* sproingies.c in Sources */, AF568AFB26E7060500CCBA38 /* sproingiewrap.c in Sources */, + AFAE148A279276BC00C62683 /* squirtorus.c in Sources */, AF568AFC26E7060500CCBA38 /* stairs.c in Sources */, AF568AFD26E7060500CCBA38 /* starwars.c in Sources */, AF568AFE26E7060500CCBA38 /* stonerview-move.c in Sources */, @@ -31769,6 +31955,7 @@ AF568B0626E7060500CCBA38 /* tangram_shapes.c in Sources */, AF568B0726E7060500CCBA38 /* teapot.c in Sources */, AF568B0826E7060500CCBA38 /* timetunnel.c in Sources */, + AFC5263027C9CB3300ECED0B /* timezones.c in Sources */, AF568B0926E7060500CCBA38 /* toast.c in Sources */, AF568B0A26E7060500CCBA38 /* toast2.c in Sources */, AF568B0B26E7060500CCBA38 /* toaster.c in Sources */, @@ -32010,6 +32197,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AF6E25B7276C3F030032E38F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AF6E25CB276C402F0032E38F /* mapscroller.c in Sources */, + AF6E25B9276C3F030032E38F /* XScreenSaverSubclass.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; AF73FF271A09877F00E485E9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -32263,7 +32459,6 @@ AF918A04158FC38A002B5D1E /* discrete.c in Sources */, AF9189B2158FC311002B5D1E /* distort.c in Sources */, AF918A05158FC38A002B5D1E /* drift.c in Sources */, - AF4C300F208569AA00BE1DEF /* dymaxionmap-coords.c in Sources */, AF9189B3158FC311002B5D1E /* epicycle.c in Sources */, AF9189B4158FC311002B5D1E /* eruption.c in Sources */, AF918A06158FC38A002B5D1E /* euler2d.c in Sources */, @@ -32320,7 +32515,7 @@ AF9189DC158FC334002B5D1E /* qix.c in Sources */, AF918A1B158FC38A002B5D1E /* penrose.c in Sources */, AF918A1C158FC38A002B5D1E /* polyominoes.c in Sources */, - AF9189DD158FC334002B5D1E /* rd-bomb.c in Sources */, + AF9189DD158FC334002B5D1E /* rdbomb.c in Sources */, AF9189DE158FC334002B5D1E /* ripples.c in Sources */, AFD9D5C0201E686B0070E99D /* ships.c in Sources */, AF9189DF158FC35D002B5D1E /* rocks.c in Sources */, @@ -32403,6 +32598,7 @@ AFCF453715986A2100E6E8CC /* dnalogo.c in Sources */, AF918A48158FC3BB002B5D1E /* dolphin.c in Sources */, AFEC23E91CB6EC7F00DE138F /* dymaxionmap.c in Sources */, + AF4C300F208569AA00BE1DEF /* dymaxionmap-coords.c in Sources */, AF918A49158FC3BB002B5D1E /* dropshadow.c in Sources */, AF918A4A158FC3E5002B5D1E /* endgame.c in Sources */, AFACE88F1CC83617008B24CD /* energystream.c in Sources */, @@ -32497,12 +32693,15 @@ AF918A94158FC417002B5D1E /* sonar-sim.c in Sources */, AF918A95158FC417002B5D1E /* sonar.c in Sources */, AFADD34424B67204005456DC /* sphereeversion.c in Sources */, + AF603F4D27C9744300EE2206 /* sphereeversion-analytic.c in Sources */, + AF603F4A27C9744300EE2206 /* sphereeversion-corrugations.c in Sources */, AF918A96158FC417002B5D1E /* spheremonics.c in Sources */, AFCF835A1AF5B5FD008BB7E1 /* splitflap.c in Sources */, AFCF83581AF5B5FD008BB7E1 /* splitflap_obj.c in Sources */, AFEE10A41D17E2BA00AAC8F7 /* splodesic.c in Sources */, AF918A97158FC473002B5D1E /* sproingies.c in Sources */, AF918A98158FC473002B5D1E /* sproingiewrap.c in Sources */, + AFAE1489279276BC00C62683 /* squirtorus.c in Sources */, AF918A99158FC473002B5D1E /* stairs.c in Sources */, AF918A9A158FC473002B5D1E /* starwars.c in Sources */, AF918A9B158FC473002B5D1E /* stonerview-move.c in Sources */, @@ -32516,6 +32715,7 @@ AF918AA3158FC473002B5D1E /* tangram_shapes.c in Sources */, AF918AA4158FC473002B5D1E /* teapot.c in Sources */, AF918AA5158FC473002B5D1E /* timetunnel.c in Sources */, + AFC5262F27C9CB3300ECED0B /* timezones.c in Sources */, AF918AA6158FC473002B5D1E /* toast.c in Sources */, AF918AA7158FC473002B5D1E /* toast2.c in Sources */, AF918AA8158FC473002B5D1E /* toaster.c in Sources */, @@ -32584,7 +32784,7 @@ buildActionMask = 2147483647; files = ( AF9757C8099C3E6300B05160 /* XScreenSaverSubclass.m in Sources */, - AF9757D6099C3EB800B05160 /* rd-bomb.c in Sources */, + AF9757D6099C3EB800B05160 /* rdbomb.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -32865,14 +33065,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - AF9E7EBB190F4C1B00A8B01F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - AF9E7EC9190F4C4000A8B01F /* enable_gc.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; AFA0B123241CE69E0071E35D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -33006,6 +33198,7 @@ buildActionMask = 2147483647; files = ( AFA55B2209933E4A00F3E977 /* glplanet.c in Sources */, + AFC5262E27C9CB3300ECED0B /* timezones.c in Sources */, AF9CCAC609959D500075E99B /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -33453,8 +33646,19 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - AFADD33224B67100005456DC /* XScreenSaverSubclass.m in Sources */, AFADD34324B67204005456DC /* sphereeversion.c in Sources */, + AF603F4C27C9744300EE2206 /* sphereeversion-analytic.c in Sources */, + AF603F4927C9744300EE2206 /* sphereeversion-corrugations.c in Sources */, + AFADD33224B67100005456DC /* XScreenSaverSubclass.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AFAE1474279275BE00C62683 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AFAE1488279276BC00C62683 /* squirtorus.c in Sources */, + AFAE1476279275BE00C62683 /* XScreenSaverSubclass.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -34810,6 +35014,16 @@ target = AF6C6D74226AE4FC0065A748 /* GravityWell */; targetProxy = AF6C6D90226AE6780065A748 /* PBXContainerItemProxy */; }; + AF6E25B3276C3F030032E38F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; + targetProxy = AF6E25B4276C3F030032E38F /* PBXContainerItemProxy */; + }; + AF6E25CE276C40D70032E38F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AF6E25B2276C3F030032E38F /* MapScroller */; + targetProxy = AF6E25CD276C40D70032E38F /* PBXContainerItemProxy */; + }; AF714E4F105613410046AB1D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AF4774B4099D8B5F001F091E /* LMorph */; @@ -36390,6 +36604,16 @@ target = AFADD32B24B67100005456DC /* SphereEversion */; targetProxy = AFADD34824B67256005456DC /* PBXContainerItemProxy */; }; + AFAE1470279275BE00C62683 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AF4808C0098C3B6C00FB32B8 /* jwxyz */; + targetProxy = AFAE1471279275BE00C62683 /* PBXContainerItemProxy */; + }; + AFAE148F2792774700C62683 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = AFAE146F279275BE00C62683 /* Squirtorus */; + targetProxy = AFAE148E2792774700C62683 /* PBXContainerItemProxy */; + }; AFB581B0102F363300342B11 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = AFD571B50996D9DC00BA26F7 /* Juggle */; @@ -38556,6 +38780,28 @@ }; name = Release; }; + AF6E25C5276C3F030032E38F /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( + "USE_GL=1", + "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + AF6E25C6276C3F030032E38F /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( + "USE_GL=1", + "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; AF73FF341A09877F00E485E9 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -39429,26 +39675,6 @@ }; name = Release; }; - AF9E7EC6190F4C1C00A8B01F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = "Apple Development"; - ENABLE_HARDENED_RUNTIME = YES; - PRODUCT_BUNDLE_IDENTIFIER = "${BUNDLE_IDENTIFIER}"; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - AF9E7EC7190F4C1C00A8B01F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_IDENTITY = "Apple Development"; - ENABLE_HARDENED_RUNTIME = YES; - PRODUCT_BUNDLE_IDENTIFIER = "${BUNDLE_IDENTIFIER}"; - SKIP_INSTALL = YES; - }; - name = Release; - }; AFA0B131241CE69E0071E35D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -40711,6 +40937,28 @@ }; name = Release; }; + AFAE1482279275BE00C62683 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( + "USE_GL=1", + "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + AFAE1483279275BE00C62683 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = ( + "USE_GL=1", + "$(GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS)", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; AFB591B8178B812C00EA4005 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -42758,6 +43006,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + AF6E25C4276C3F030032E38F /* Build configuration list for PBXNativeTarget "MapScroller" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AF6E25C5276C3F030032E38F /* Debug */, + AF6E25C6276C3F030032E38F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; AF73FF331A09877F00E485E9 /* Build configuration list for PBXNativeTarget "BinaryRing" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -43280,15 +43537,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - AF9E7EC5190F4C1C00A8B01F /* Build configuration list for PBXNativeTarget "enable_gc" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - AF9E7EC6190F4C1C00A8B01F /* Debug */, - AF9E7EC7190F4C1C00A8B01F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; AFA0B130241CE69E0071E35D /* Build configuration list for PBXNativeTarget "Gibson" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -43865,6 +44113,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + AFAE1481279275BE00C62683 /* Build configuration list for PBXNativeTarget "Squirtorus" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AFAE1482279275BE00C62683 /* Debug */, + AFAE1483279275BE00C62683 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; AFB591B7178B812C00EA4005 /* Build configuration list for PBXNativeTarget "Hexadrop" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/OSX/xscreensaver.xcodeproj/xcshareddata/xcschemes/Abstractile.xcscheme b/OSX/xscreensaver.xcodeproj/xcshareddata/xcschemes/Abstractile.xcscheme index 1b46f6d4..dfaa42f8 100644 --- a/OSX/xscreensaver.xcodeproj/xcshareddata/xcschemes/Abstractile.xcscheme +++ b/OSX/xscreensaver.xcodeproj/xcshareddata/xcschemes/Abstractile.xcscheme @@ -1,6 +1,6 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/OSX/xscreensaver.xcodeproj/xcshareddata/xcschemes/Marbling.xcscheme b/OSX/xscreensaver.xcodeproj/xcshareddata/xcschemes/Marbling.xcscheme index b5e873a4..5e87ed97 100644 --- a/OSX/xscreensaver.xcodeproj/xcshareddata/xcschemes/Marbling.xcscheme +++ b/OSX/xscreensaver.xcodeproj/xcshareddata/xcschemes/Marbling.xcscheme @@ -1,6 +1,6 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/OSX/xscreensaver.xcodeproj/xcshareddata/xcschemes/Stairs.xcscheme b/OSX/xscreensaver.xcodeproj/xcshareddata/xcschemes/Stairs.xcscheme index 48e508c0..f42de02e 100644 --- a/OSX/xscreensaver.xcodeproj/xcshareddata/xcschemes/Stairs.xcscheme +++ b/OSX/xscreensaver.xcodeproj/xcshareddata/xcschemes/Stairs.xcscheme @@ -1,6 +1,6 @@ , 1995, 1996 -# -# Modified to never use included libintl. -# Owen Taylor , 12/15/1998 -# -# Major rework to remove unused code -# Owen Taylor , 12/11/2002 -# -# Added better handling of ALL_LINGUAS from GNU gettext version -# written by Bruno Haible, Owen Taylor 5/30/3002 -# -# Modified to require ngettext -# Matthias Clasen 08/06/2004 +# gettext.m4 serial 71 (gettext-0.20.2) +dnl Copyright (C) 1995-2014, 2016, 2018-2020 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can be used in projects which are not available under +dnl the GNU General Public License or the GNU Lesser General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Lesser General Public License, and the rest of the GNU +dnl gettext package is covered by the GNU General Public License. +dnl They are *not* in the public domain. -# Increment this whenever this file is changed. -#serial 1 +dnl Authors: +dnl Ulrich Drepper , 1995-2000. +dnl Bruno Haible , 2000-2006, 2008-2010. -# We need this here as well, since someone might use autoconf-2.5x -# to configure GLib then an older version to configure a package -# using AM_GLIB_GNU_GETTEXT -AC_PREREQ(2.53) +dnl Macro to add for using GNU gettext. +dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). +dnl INTLSYMBOL must be one of 'external', 'use-libtool'. +dnl INTLSYMBOL should be 'external' for packages other than GNU gettext, and +dnl 'use-libtool' for the packages 'gettext-runtime' and 'gettext-tools'. +dnl If INTLSYMBOL is 'use-libtool', then a libtool library +dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, +dnl depending on --{enable,disable}-{shared,static} and on the presence of +dnl AM-DISABLE-SHARED). +dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext +dnl implementations (in libc or libintl) without the ngettext() function +dnl will be ignored. If NEEDSYMBOL is specified and is +dnl 'need-formatstring-macros', then GNU gettext implementations that don't +dnl support the ISO C 99 formatstring macros will be ignored. +dnl INTLDIR is used to find the intl libraries. If empty, +dnl the value '$(top_builddir)/intl/' is used. dnl -dnl We go to great lengths to make sure that aclocal won't -dnl try to pull in the installed version of these macros -dnl when running aclocal in the glib directory. -dnl -m4_copy([AC_DEFUN],[glib_DEFUN]) -m4_copy([AC_REQUIRE],[glib_REQUIRE]) -dnl -dnl At the end, if we're not within glib, we'll define the public -dnl definitions in terms of our private definitions. +dnl The result of the configuration is one of three cases: +dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled +dnl and used. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 2) GNU gettext has been found in the system's C library. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 3) No internationalization, always use English msgid. +dnl Catalog format: none +dnl Catalog extension: none +dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. +dnl The use of .gmo is historical (it was needed to avoid overwriting the +dnl GNU format catalogs when building on a platform with an X/Open gettext), +dnl but we keep it in order not to force irrelevant filename changes on the +dnl maintainers. dnl +AC_DEFUN([AM_GNU_GETTEXT], +[ + dnl Argument checking. + ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [use-libtool], , + [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT +])])])]) + ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old], + [errprint([ERROR: Use of AM_GNU_GETTEXT without [external] argument is no longer supported. +])]) + ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , + [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT +])])])]) + define([gt_included_intl], + ifelse([$1], [external], [no], [yes])) + gt_NEEDS_INIT + AM_GNU_GETTEXT_NEED([$2]) -# GLIB_LC_MESSAGES -#-------------------- -glib_DEFUN([GLIB_LC_MESSAGES], - [AC_CHECK_HEADERS([locale.h]) - if test $ac_cv_header_locale_h = yes; then - AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, - [AC_TRY_LINK([#include ], [return LC_MESSAGES], - am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) - if test $am_cv_val_LC_MESSAGES = yes; then - AC_DEFINE(HAVE_LC_MESSAGES, 1, - [Define if your file defines LC_MESSAGES.]) - fi - fi]) + AC_REQUIRE([AM_PO_SUBDIRS])dnl + ifelse(gt_included_intl, yes, [ + AC_REQUIRE([AM_INTL_SUBDIR])dnl + ]) -# GLIB_PATH_PROG_WITH_TEST -#---------------------------- -dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, -dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) -glib_DEFUN([GLIB_PATH_PROG_WITH_TEST], -[# Extract the first word of "$2", so it can be a program name with args. -set dummy $2; ac_word=[$]2 -AC_MSG_CHECKING([for $ac_word]) -AC_CACHE_VAL(ac_cv_path_$1, -[case "[$]$1" in - /*) - ac_cv_path_$1="[$]$1" # Let the user override the test with a path. - ;; - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in ifelse([$5], , $PATH, [$5]); do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - if [$3]; then - ac_cv_path_$1="$ac_dir/$ac_word" - break - fi - fi - done - IFS="$ac_save_ifs" -dnl If no 4th arg is given, leave the cache variable unset, -dnl so AC_PATH_PROGS will keep looking. -ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" -])dnl - ;; -esac])dnl -$1="$ac_cv_path_$1" -if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then - AC_MSG_RESULT([$]$1) -else - AC_MSG_RESULT(no) -fi -AC_SUBST($1)dnl -]) + dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) -dnl Checks for special options needed on Mac OS X. -dnl Defines INTL_MACOSX_LIBS. -dnl -dnl Copied from intlmacosx.m4 in gettext, GPL. -dnl Copyright (C) 2004-2013 Free Software Foundation, Inc. -glib_DEFUN([glib_gt_INTL_MACOSX], -[ - dnl Check for API introduced in Mac OS X 10.2. - AC_CACHE_CHECK([for CFPreferencesCopyAppValue], - [gt_cv_func_CFPreferencesCopyAppValue], - [gt_save_LIBS="$LIBS" - LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[#include ]], - [[CFPreferencesCopyAppValue(NULL, NULL)]])], - [gt_cv_func_CFPreferencesCopyAppValue=yes], - [gt_cv_func_CFPreferencesCopyAppValue=no]) - LIBS="$gt_save_LIBS"]) - if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then - AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1], - [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) - fi - dnl Check for API introduced in Mac OS X 10.3. - AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent], - [gt_save_LIBS="$LIBS" - LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" - AC_LINK_IFELSE( - [AC_LANG_PROGRAM( - [[#include ]], - [[CFLocaleCopyCurrent();]])], - [gt_cv_func_CFLocaleCopyCurrent=yes], - [gt_cv_func_CFLocaleCopyCurrent=no]) - LIBS="$gt_save_LIBS"]) - if test $gt_cv_func_CFLocaleCopyCurrent = yes; then - AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1], - [Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) - fi - INTL_MACOSX_LIBS= - if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then - INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" - fi - AC_SUBST([INTL_MACOSX_LIBS]) -]) + dnl Sometimes libintl requires libiconv, so first search for libiconv. + dnl Ideally we would do this search only after the + dnl if test "$USE_NLS" = "yes"; then + dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then + dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT + dnl the configure script would need to contain the same shell code + dnl again, outside any 'if'. There are two solutions: + dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. + dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. + dnl Since AC_PROVIDE_IFELSE is not documented, we avoid it. + ifelse(gt_included_intl, yes, , [ + AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) + ]) + + dnl Sometimes, on Mac OS X, libintl requires linking with CoreFoundation. + gt_INTL_MACOSX + + dnl Set USE_NLS. + AC_REQUIRE([AM_NLS]) + + ifelse(gt_included_intl, yes, [ + BUILD_INCLUDED_LIBINTL=no + USE_INCLUDED_LIBINTL=no + ]) + LIBINTL= + LTLIBINTL= + POSUB= -# GLIB_WITH_NLS -#----------------- -glib_DEFUN([GLIB_WITH_NLS], - dnl NLS is obligatory - [USE_NLS=yes - AC_SUBST(USE_NLS) + dnl Add a version number to the cache macros. + case " $gt_needs " in + *" need-formatstring-macros "*) gt_api_version=3 ;; + *" need-ngettext "*) gt_api_version=2 ;; + *) gt_api_version=1 ;; + esac + gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" + gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" - gt_cv_have_gettext=no + dnl If we use NLS figure out what method + if test "$USE_NLS" = "yes"; then + gt_use_preinstalled_gnugettext=no + ifelse(gt_included_intl, yes, [ + AC_MSG_CHECKING([whether included gettext is requested]) + AC_ARG_WITH([included-gettext], + [ --with-included-gettext use the GNU gettext library included here], + nls_cv_force_use_gnu_gettext=$withval, + nls_cv_force_use_gnu_gettext=no) + AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext]) - CATOBJEXT=NONE - XGETTEXT=: - INTLLIBS= + nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" + if test "$nls_cv_force_use_gnu_gettext" != "yes"; then + ]) + dnl User does not insist on using GNU NLS library. Figure out what + dnl to use. If GNU gettext is available we use this. Else we have + dnl to fall back to GNU NLS library. - glib_gt_INTL_MACOSX + if test $gt_api_version -ge 3; then + gt_revision_test_code=' +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) +#endif +changequote(,)dnl +typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; +changequote([,])dnl +' + else + gt_revision_test_code= + fi + if test $gt_api_version -ge 2; then + gt_expression_test_code=' + * ngettext ("", "", 0)' + else + gt_expression_test_code= + fi - AC_CHECK_HEADER(libintl.h, - [gt_cv_func_dgettext_libintl="no" - libintl_extra_libs="" + AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc], + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +extern int _nl_msg_cat_cntr; +extern int *_nl_domain_bindings; +#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_domain_bindings) +#else +#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 +#endif +$gt_revision_test_code + ]], + [[ +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION + ]])], + [eval "$gt_func_gnugettext_libc=yes"], + [eval "$gt_func_gnugettext_libc=no"])]) - # - # First check in libc - # - AC_CACHE_CHECK([for ngettext in libc], gt_cv_func_ngettext_libc, - [AC_TRY_LINK([ + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then + dnl Sometimes libintl requires libiconv, so first search for libiconv. + ifelse(gt_included_intl, yes, , [ + AM_ICONV_LINK + ]) + dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL + dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) + dnl because that would add "-liconv" to LIBINTL and LTLIBINTL + dnl even if libiconv doesn't exist. + AC_LIB_LINKFLAGS_BODY([intl]) + AC_CACHE_CHECK([for GNU gettext in libintl], + [$gt_func_gnugettext_libintl], + [gt_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $INCINTL" + gt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBINTL" + dnl Now see whether libintl exists and does not depend on libiconv. + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ #include -], - [return !ngettext ("","", 1)], - gt_cv_func_ngettext_libc=yes, - gt_cv_func_ngettext_libc=no) - ]) - - if test "$gt_cv_func_ngettext_libc" = "yes" ; then - AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc, - [AC_TRY_LINK([ +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); +#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) +#else +#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 +#endif +$gt_revision_test_code + ]], + [[ +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION + ]])], + [eval "$gt_func_gnugettext_libintl=yes"], + [eval "$gt_func_gnugettext_libintl=no"]) + dnl Now see whether libintl exists and depends on libiconv. + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then + LIBS="$LIBS $LIBICONV" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ #include -], - [return !dgettext ("","")], - gt_cv_func_dgettext_libc=yes, - gt_cv_func_dgettext_libc=no) - ]) - fi - - if test "$gt_cv_func_ngettext_libc" = "yes" ; then - AC_CHECK_FUNCS(bind_textdomain_codeset) - fi +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); +#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) +#else +#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 +#endif +$gt_revision_test_code + ]], + [[ +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION + ]])], + [LIBINTL="$LIBINTL $LIBICONV" + LTLIBINTL="$LTLIBINTL $LTLIBICONV" + eval "$gt_func_gnugettext_libintl=yes" + ]) + fi + CPPFLAGS="$gt_save_CPPFLAGS" + LIBS="$gt_save_LIBS"]) + fi - # - # If we don't have everything we want, check in libintl - # - if test "$gt_cv_func_dgettext_libc" != "yes" \ - || test "$gt_cv_func_ngettext_libc" != "yes" \ - || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then - - AC_CHECK_LIB(intl, bindtextdomain, - [AC_CHECK_LIB(intl, ngettext, - [AC_CHECK_LIB(intl, dgettext, - gt_cv_func_dgettext_libintl=yes)])]) - - if test "$gt_cv_func_dgettext_libintl" != "yes" ; then - AC_MSG_CHECKING([if -liconv is needed to use gettext]) - AC_MSG_RESULT([]) - AC_CHECK_LIB(intl, ngettext, - [AC_CHECK_LIB(intl, dcgettext, - [gt_cv_func_dgettext_libintl=yes - libintl_extra_libs=-liconv], - :,-liconv)], - :,-liconv) + dnl If an already present or preinstalled GNU gettext() is found, + dnl use it. But if this macro is used in GNU gettext, and GNU + dnl gettext is already preinstalled in libintl, we update this + dnl libintl. (Cf. the install rule in intl/Makefile.in.) + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ + || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ + && test "$PACKAGE" != gettext-runtime \ + && test "$PACKAGE" != gettext-tools; }; then + gt_use_preinstalled_gnugettext=yes + else + dnl Reset the values set by searching for libintl. + LIBINTL= + LTLIBINTL= + INCINTL= fi - # - # If we found libintl, then check in it for bind_textdomain_codeset(); - # we'll prefer libc if neither have bind_textdomain_codeset(), - # and both have dgettext and ngettext - # - if test "$gt_cv_func_dgettext_libintl" = "yes" ; then - glib_save_LIBS="$LIBS" - LIBS="$LIBS -lintl $libintl_extra_libs" - unset ac_cv_func_bind_textdomain_codeset - AC_CHECK_FUNCS(bind_textdomain_codeset) - LIBS="$glib_save_LIBS" - - if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then - gt_cv_func_dgettext_libc=no - else - if test "$gt_cv_func_dgettext_libc" = "yes" \ - && test "$gt_cv_func_ngettext_libc" = "yes"; then - gt_cv_func_dgettext_libintl=no - fi - fi + ifelse(gt_included_intl, yes, [ + if test "$gt_use_preinstalled_gnugettext" != "yes"; then + dnl GNU gettext is not found in the C library. + dnl Fall back on included GNU gettext library. + nls_cv_use_gnu_gettext=yes fi fi - if test "$gt_cv_func_dgettext_libc" = "yes" \ - || test "$gt_cv_func_dgettext_libintl" = "yes"; then - gt_cv_have_gettext=yes + if test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Mark actions used to generate GNU NLS library. + BUILD_INCLUDED_LIBINTL=yes + USE_INCLUDED_LIBINTL=yes + LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.la $LIBICONV $LIBTHREAD" + LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.la $LTLIBICONV $LTLIBTHREAD" + LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi - - if test "$gt_cv_func_dgettext_libintl" = "yes"; then - INTLLIBS="-lintl $libintl_extra_libs $INTL_MACOSX_LIBS" - fi - - if test "$gt_cv_have_gettext" = "yes"; then - AC_DEFINE(HAVE_GETTEXT,1, - [Define if the GNU gettext() function is already present or preinstalled.]) - GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, - [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl - if test "$MSGFMT" != "no"; then - glib_save_LIBS="$LIBS" - LIBS="$LIBS $INTLLIBS" - AC_CHECK_FUNCS(dcgettext) - MSGFMT_OPTS= - AC_MSG_CHECKING([if msgfmt accepts -c]) - GLIB_RUN_PROG([$MSGFMT -c -o /dev/null],[ -msgid "" -msgstr "" -"Content-Type: text/plain; charset=UTF-8\n" -"Project-Id-Version: test 1.0\n" -"PO-Revision-Date: 2007-02-15 12:01+0100\n" -"Last-Translator: test \n" -"Language-Team: C \n" -"MIME-Version: 1.0\n" -"Content-Transfer-Encoding: 8bit\n" -], [MSGFMT_OPTS=-c; AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) - AC_SUBST(MSGFMT_OPTS) - AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) - GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, - [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) - AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; - return _nl_msg_cat_cntr], - [CATOBJEXT=.gmo - DATADIRNAME=share], - [case $host in - *-*-solaris*) - dnl On Solaris, if bind_textdomain_codeset is in libc, - dnl GNU format message catalog is always supported, - dnl since both are added to the libc all together. - dnl Hence, we'd like to go with DATADIRNAME=share and - dnl and CATOBJEXT=.gmo in this case. - AC_CHECK_FUNC(bind_textdomain_codeset, - [CATOBJEXT=.gmo - DATADIRNAME=share], - [CATOBJEXT=.mo - DATADIRNAME=lib]) - ;; - *-*-openbsd*) - CATOBJEXT=.mo - DATADIRNAME=share - ;; - *) - CATOBJEXT=.mo - DATADIRNAME=lib - ;; - esac]) - LIBS="$glib_save_LIBS" - INSTOBJEXT=.mo - else - gt_cv_have_gettext=no - fi + + CATOBJEXT= + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Mark actions to use GNU gettext tools. + CATOBJEXT=.gmo fi ]) - if test "$gt_cv_have_gettext" = "yes" ; then - AC_DEFINE(ENABLE_NLS, 1, - [always defined to indicate that i18n is enabled]) + if test -n "$INTL_MACOSX_LIBS"; then + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Some extra flags are needed during linking. + LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" + LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" + fi + fi + + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + AC_DEFINE([ENABLE_NLS], [1], + [Define to 1 if translation of program messages to the user's native language + is requested.]) + else + USE_NLS=no fi + fi - dnl Test whether we really found GNU xgettext. - if test "$XGETTEXT" != ":"; then - dnl If it is not GNU xgettext we define it as : so that the - dnl Makefiles still can work. - if $XGETTEXT --omit-header /dev/null 2> /dev/null; then - : ; + AC_MSG_CHECKING([whether to use NLS]) + AC_MSG_RESULT([$USE_NLS]) + if test "$USE_NLS" = "yes"; then + AC_MSG_CHECKING([where the gettext function comes from]) + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + gt_source="external libintl" else - AC_MSG_RESULT( - [found xgettext program is not GNU xgettext; ignore it]) - XGETTEXT=":" + gt_source="libc" fi + else + gt_source="included intl directory" fi + AC_MSG_RESULT([$gt_source]) + fi - # We need to process the po/ directory. - POSUB=po + if test "$USE_NLS" = "yes"; then - AC_OUTPUT_COMMANDS( - [case "$CONFIG_FILES" in *po/Makefile.in*) - sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile - esac]) + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + AC_MSG_CHECKING([how to link with libintl]) + AC_MSG_RESULT([$LIBINTL]) + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) + fi - dnl These rules are solely for the distribution goal. While doing this - dnl we only have to keep exactly one list of the available catalogs - dnl in configure.ac. - for lang in $ALL_LINGUAS; do - GMOFILES="$GMOFILES $lang.gmo" - POFILES="$POFILES $lang.po" - done + dnl For backward compatibility. Some packages may be using this. + AC_DEFINE([HAVE_GETTEXT], [1], + [Define if the GNU gettext() function is already present or preinstalled.]) + AC_DEFINE([HAVE_DCGETTEXT], [1], + [Define if the GNU dcgettext() function is already present or preinstalled.]) + fi + + dnl We need to process the po/ directory. + POSUB=po + fi + + ifelse(gt_included_intl, yes, [ + dnl In GNU gettext we have to set BUILD_INCLUDED_LIBINTL to 'yes' + dnl because some of the testsuite requires it. + BUILD_INCLUDED_LIBINTL=yes dnl Make all variables we use known to autoconf. - AC_SUBST(CATALOGS) - AC_SUBST(CATOBJEXT) - AC_SUBST(DATADIRNAME) - AC_SUBST(GMOFILES) - AC_SUBST(INSTOBJEXT) - AC_SUBST(INTLLIBS) - AC_SUBST(PO_IN_DATADIR_TRUE) - AC_SUBST(PO_IN_DATADIR_FALSE) - AC_SUBST(POFILES) - AC_SUBST(POSUB) + AC_SUBST([BUILD_INCLUDED_LIBINTL]) + AC_SUBST([USE_INCLUDED_LIBINTL]) + AC_SUBST([CATOBJEXT]) ]) -# AM_GLIB_GNU_GETTEXT -# ------------------- -# Do checks necessary for use of gettext. If a suitable implementation -# of gettext is found in either in libintl or in the C library, -# it will set INTLLIBS to the libraries needed for use of gettext -# and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable -# gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST() -# on various variables needed by the Makefile.in.in installed by -# glib-gettextize. + dnl For backward compatibility. Some Makefiles may be using this. + INTLLIBS="$LIBINTL" + AC_SUBST([INTLLIBS]) + + dnl Make all documented variables known to autoconf. + AC_SUBST([LIBINTL]) + AC_SUBST([LTLIBINTL]) + AC_SUBST([POSUB]) +]) + + +dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. +m4_define([gt_NEEDS_INIT], +[ + m4_divert_text([DEFAULTS], [gt_needs=]) + m4_define([gt_NEEDS_INIT], []) +]) + + +dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL]) +AC_DEFUN([AM_GNU_GETTEXT_NEED], +[ + m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"]) +]) + + +dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) +AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) + + +dnl Usage: AM_GNU_GETTEXT_REQUIRE_VERSION([gettext-version]) +AC_DEFUN([AM_GNU_GETTEXT_REQUIRE_VERSION], []) + +# host-cpu-c-abi.m4 serial 13 +dnl Copyright (C) 2002-2020 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible and Sam Steingold. + +dnl Sets the HOST_CPU variable to the canonical name of the CPU. +dnl Sets the HOST_CPU_C_ABI variable to the canonical name of the CPU with its +dnl C language ABI (application binary interface). +dnl Also defines __${HOST_CPU}__ and __${HOST_CPU_C_ABI}__ as C macros in +dnl config.h. dnl -AU_DEFUN([GLIB_GNU_GETTEXT], - [AC_REQUIRE([AC_PROG_CC])dnl - - GLIB_LC_MESSAGES - GLIB_WITH_NLS - - if test "$gt_cv_have_gettext" = "yes"; then - if test "x$ALL_LINGUAS" = "x"; then - LINGUAS= +dnl This canonical name can be used to select a particular assembly language +dnl source file that will interoperate with C code on the given host. +dnl +dnl For example: +dnl * 'i386' and 'sparc' are different canonical names, because code for i386 +dnl will not run on SPARC CPUs and vice versa. They have different +dnl instruction sets. +dnl * 'sparc' and 'sparc64' are different canonical names, because code for +dnl 'sparc' and code for 'sparc64' cannot be linked together: 'sparc' code +dnl contains 32-bit instructions, whereas 'sparc64' code contains 64-bit +dnl instructions. A process on a SPARC CPU can be in 32-bit mode or in 64-bit +dnl mode, but not both. +dnl * 'mips' and 'mipsn32' are different canonical names, because they use +dnl different argument passing and return conventions for C functions, and +dnl although the instruction set of 'mips' is a large subset of the +dnl instruction set of 'mipsn32'. +dnl * 'mipsn32' and 'mips64' are different canonical names, because they use +dnl different sizes for the C types like 'int' and 'void *', and although +dnl the instruction sets of 'mipsn32' and 'mips64' are the same. +dnl * The same canonical name is used for different endiannesses. You can +dnl determine the endianness through preprocessor symbols: +dnl - 'arm': test __ARMEL__. +dnl - 'mips', 'mipsn32', 'mips64': test _MIPSEB vs. _MIPSEL. +dnl - 'powerpc64': test _BIG_ENDIAN vs. _LITTLE_ENDIAN. +dnl * The same name 'i386' is used for CPUs of type i386, i486, i586 +dnl (Pentium), AMD K7, Pentium II, Pentium IV, etc., because +dnl - Instructions that do not exist on all of these CPUs (cmpxchg, +dnl MMX, SSE, SSE2, 3DNow! etc.) are not frequently used. If your +dnl assembly language source files use such instructions, you will +dnl need to make the distinction. +dnl - Speed of execution of the common instruction set is reasonable across +dnl the entire family of CPUs. If you have assembly language source files +dnl that are optimized for particular CPU types (like GNU gmp has), you +dnl will need to make the distinction. +dnl See . +AC_DEFUN([gl_HOST_CPU_C_ABI], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([gl_C_ASM]) + AC_CACHE_CHECK([host CPU and C ABI], [gl_cv_host_cpu_c_abi], + [case "$host_cpu" in + +changequote(,)dnl + i[34567]86 ) +changequote([,])dnl + gl_cv_host_cpu_c_abi=i386 + ;; + + x86_64 ) + # On x86_64 systems, the C compiler may be generating code in one of + # these ABIs: + # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64. + # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64 + # with native Windows (mingw, MSVC). + # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32. + # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if (defined __x86_64__ || defined __amd64__ \ + || defined _M_X64 || defined _M_AMD64) + int ok; + #else + error fail + #endif + ]])], + [AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined __ILP32__ || defined _ILP32 + int ok; + #else + error fail + #endif + ]])], + [gl_cv_host_cpu_c_abi=x86_64-x32], + [gl_cv_host_cpu_c_abi=x86_64])], + [gl_cv_host_cpu_c_abi=i386]) + ;; + +changequote(,)dnl + alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] ) +changequote([,])dnl + gl_cv_host_cpu_c_abi=alpha + ;; + + arm* | aarch64 ) + # Assume arm with EABI. + # On arm64 systems, the C compiler may be generating code in one of + # these ABIs: + # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64. + # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32. + # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#ifdef __aarch64__ + int ok; + #else + error fail + #endif + ]])], + [AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined __ILP32__ || defined _ILP32 + int ok; + #else + error fail + #endif + ]])], + [gl_cv_host_cpu_c_abi=arm64-ilp32], + [gl_cv_host_cpu_c_abi=arm64])], + [# Don't distinguish little-endian and big-endian arm, since they + # don't require different machine code for simple operations and + # since the user can distinguish them through the preprocessor + # defines __ARMEL__ vs. __ARMEB__. + # But distinguish arm which passes floating-point arguments and + # return values in integer registers (r0, r1, ...) - this is + # gcc -mfloat-abi=soft or gcc -mfloat-abi=softfp - from arm which + # passes them in float registers (s0, s1, ...) and double registers + # (d0, d1, ...) - this is gcc -mfloat-abi=hard. GCC 4.6 or newer + # sets the preprocessor defines __ARM_PCS (for the first case) and + # __ARM_PCS_VFP (for the second case), but older GCC does not. + echo 'double ddd; void func (double dd) { ddd = dd; }' > conftest.c + # Look for a reference to the register d0 in the .s file. + AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c) >/dev/null 2>&1 + if LC_ALL=C grep 'd0,' conftest.$gl_asmext >/dev/null; then + gl_cv_host_cpu_c_abi=armhf + else + gl_cv_host_cpu_c_abi=arm + fi + rm -f conftest* + ]) + ;; + + hppa1.0 | hppa1.1 | hppa2.0* | hppa64 ) + # On hppa, the C compiler may be generating 32-bit code or 64-bit + # code. In the latter case, it defines _LP64 and __LP64__. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#ifdef __LP64__ + int ok; + #else + error fail + #endif + ]])], + [gl_cv_host_cpu_c_abi=hppa64], + [gl_cv_host_cpu_c_abi=hppa]) + ;; + + ia64* ) + # On ia64 on HP-UX, the C compiler may be generating 64-bit code or + # 32-bit code. In the latter case, it defines _ILP32. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#ifdef _ILP32 + int ok; + #else + error fail + #endif + ]])], + [gl_cv_host_cpu_c_abi=ia64-ilp32], + [gl_cv_host_cpu_c_abi=ia64]) + ;; + + mips* ) + # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this + # at 32. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64) + int ok; + #else + error fail + #endif + ]])], + [gl_cv_host_cpu_c_abi=mips64], + [# In the n32 ABI, _ABIN32 is defined, _ABIO32 is not defined (but + # may later get defined by ), and _MIPS_SIM == _ABIN32. + # In the 32 ABI, _ABIO32 is defined, _ABIN32 is not defined (but + # may later get defined by ), and _MIPS_SIM == _ABIO32. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if (_MIPS_SIM == _ABIN32) + int ok; + #else + error fail + #endif + ]])], + [gl_cv_host_cpu_c_abi=mipsn32], + [gl_cv_host_cpu_c_abi=mips])]) + ;; + + powerpc* ) + # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD. + # No need to distinguish them here; the caller may distinguish + # them based on the OS. + # On powerpc64 systems, the C compiler may still be generating + # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may + # be generating 64-bit code. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined __powerpc64__ || defined _ARCH_PPC64 + int ok; + #else + error fail + #endif + ]])], + [# On powerpc64, there are two ABIs on Linux: The AIX compatible + # one and the ELFv2 one. The latter defines _CALL_ELF=2. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined _CALL_ELF && _CALL_ELF == 2 + int ok; + #else + error fail + #endif + ]])], + [gl_cv_host_cpu_c_abi=powerpc64-elfv2], + [gl_cv_host_cpu_c_abi=powerpc64]) + ], + [gl_cv_host_cpu_c_abi=powerpc]) + ;; + + rs6000 ) + gl_cv_host_cpu_c_abi=powerpc + ;; + + riscv32 | riscv64 ) + # There are 2 architectures (with variants): rv32* and rv64*. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if __riscv_xlen == 64 + int ok; + #else + error fail + #endif + ]])], + [cpu=riscv64], + [cpu=riscv32]) + # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d. + # Size of 'long' and 'void *': + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined __LP64__ + int ok; + #else + error fail + #endif + ]])], + [main_abi=lp64], + [main_abi=ilp32]) + # Float ABIs: + # __riscv_float_abi_double: + # 'float' and 'double' are passed in floating-point registers. + # __riscv_float_abi_single: + # 'float' are passed in floating-point registers. + # __riscv_float_abi_soft: + # No values are passed in floating-point registers. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined __riscv_float_abi_double + int ok; + #else + error fail + #endif + ]])], + [float_abi=d], + [AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined __riscv_float_abi_single + int ok; + #else + error fail + #endif + ]])], + [float_abi=f], + [float_abi='']) + ]) + gl_cv_host_cpu_c_abi="${cpu}-${main_abi}${float_abi}" + ;; + + s390* ) + # On s390x, the C compiler may be generating 64-bit (= s390x) code + # or 31-bit (= s390) code. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined __LP64__ || defined __s390x__ + int ok; + #else + error fail + #endif + ]])], + [gl_cv_host_cpu_c_abi=s390x], + [gl_cv_host_cpu_c_abi=s390]) + ;; + + sparc | sparc64 ) + # UltraSPARCs running Linux have `uname -m` = "sparc64", but the + # C compiler still generates 32-bit code. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined __sparcv9 || defined __arch64__ + int ok; + #else + error fail + #endif + ]])], + [gl_cv_host_cpu_c_abi=sparc64], + [gl_cv_host_cpu_c_abi=sparc]) + ;; + + *) + gl_cv_host_cpu_c_abi="$host_cpu" + ;; + esac + ]) + + dnl In most cases, $HOST_CPU and $HOST_CPU_C_ABI are the same. + HOST_CPU=`echo "$gl_cv_host_cpu_c_abi" | sed -e 's/-.*//'` + HOST_CPU_C_ABI="$gl_cv_host_cpu_c_abi" + AC_SUBST([HOST_CPU]) + AC_SUBST([HOST_CPU_C_ABI]) + + # This was + # AC_DEFINE_UNQUOTED([__${HOST_CPU}__]) + # AC_DEFINE_UNQUOTED([__${HOST_CPU_C_ABI}__]) + # earlier, but KAI C++ 3.2d doesn't like this. + sed -e 's/-/_/g' >> confdefs.h < +#include + ]], + [[iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);]])], + [am_cv_func_iconv=yes]) + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +#include + ]], + [[iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);]])], + [am_cv_lib_iconv=yes] + [am_cv_func_iconv=yes]) + LIBS="$am_save_LIBS" + fi + ]) + if test "$am_cv_func_iconv" = yes; then + AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [ + dnl This tests against bugs in AIX 5.1, AIX 6.1..7.1, HP-UX 11.11, + dnl Solaris 10. + am_save_LIBS="$LIBS" + if test $am_cv_lib_iconv = yes; then + LIBS="$LIBS $LIBICONV" + fi + am_cv_func_iconv_works=no + for ac_iconv_const in '' 'const'; do + AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +#include + +#ifndef ICONV_CONST +# define ICONV_CONST $ac_iconv_const +#endif + ]], + [[int result = 0; + /* Test against AIX 5.1 bug: Failures are not distinguishable from successful + returns. */ + { + iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); + if (cd_utf8_to_88591 != (iconv_t)(-1)) + { + static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */ + char buf[10]; + ICONV_CONST char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_utf8_to_88591, + &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + result |= 1; + iconv_close (cd_utf8_to_88591); + } + } + /* Test against Solaris 10 bug: Failures are not distinguishable from + successful returns. */ + { + iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); + if (cd_ascii_to_88591 != (iconv_t)(-1)) + { + static ICONV_CONST char input[] = "\263"; + char buf[10]; + ICONV_CONST char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_ascii_to_88591, + &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + result |= 2; + iconv_close (cd_ascii_to_88591); + } + } + /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ + { + iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); + if (cd_88591_to_utf8 != (iconv_t)(-1)) + { + static ICONV_CONST char input[] = "\304"; + static char buf[2] = { (char)0xDE, (char)0xAD }; + ICONV_CONST char *inptr = input; + size_t inbytesleft = 1; + char *outptr = buf; + size_t outbytesleft = 1; + size_t res = iconv (cd_88591_to_utf8, + &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) + result |= 4; + iconv_close (cd_88591_to_utf8); + } + } +#if 0 /* This bug could be worked around by the caller. */ + /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ + { + iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); + if (cd_88591_to_utf8 != (iconv_t)(-1)) + { + static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char buf[50]; + ICONV_CONST char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_88591_to_utf8, + &inptr, &inbytesleft, + &outptr, &outbytesleft); + if ((int)res > 0) + result |= 8; + iconv_close (cd_88591_to_utf8); + } + } +#endif + /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is + provided. */ + { + /* Try standardized names. */ + iconv_t cd1 = iconv_open ("UTF-8", "EUC-JP"); + /* Try IRIX, OSF/1 names. */ + iconv_t cd2 = iconv_open ("UTF-8", "eucJP"); + /* Try AIX names. */ + iconv_t cd3 = iconv_open ("UTF-8", "IBM-eucJP"); + /* Try HP-UX names. */ + iconv_t cd4 = iconv_open ("utf8", "eucJP"); + if (cd1 == (iconv_t)(-1) && cd2 == (iconv_t)(-1) + && cd3 == (iconv_t)(-1) && cd4 == (iconv_t)(-1)) + result |= 16; + if (cd1 != (iconv_t)(-1)) + iconv_close (cd1); + if (cd2 != (iconv_t)(-1)) + iconv_close (cd2); + if (cd3 != (iconv_t)(-1)) + iconv_close (cd3); + if (cd4 != (iconv_t)(-1)) + iconv_close (cd4); + } + return result; +]])], + [am_cv_func_iconv_works=yes], , + [case "$host_os" in + aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; + *) am_cv_func_iconv_works="guessing yes" ;; + esac]) + test "$am_cv_func_iconv_works" = no || break + done + LIBS="$am_save_LIBS" + ]) + case "$am_cv_func_iconv_works" in + *no) am_func_iconv=no am_cv_lib_iconv=no ;; + *) am_func_iconv=yes ;; + esac + else + am_func_iconv=no am_cv_lib_iconv=no + fi + if test "$am_func_iconv" = yes; then + AC_DEFINE([HAVE_ICONV], [1], + [Define if you have the iconv() function and it works.]) + fi + if test "$am_cv_lib_iconv" = yes; then + AC_MSG_CHECKING([how to link with libiconv]) + AC_MSG_RESULT([$LIBICONV]) + else + dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV + dnl either. + CPPFLAGS="$am_save_CPPFLAGS" + LIBICONV= + LTLIBICONV= + fi + AC_SUBST([LIBICONV]) + AC_SUBST([LTLIBICONV]) +]) + +dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to +dnl avoid warnings like +dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required". +dnl This is tricky because of the way 'aclocal' is implemented: +dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN. +dnl Otherwise aclocal's initial scan pass would miss the macro definition. +dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions. +dnl Otherwise aclocal would emit many "Use of uninitialized value $1" +dnl warnings. +m4_define([gl_iconv_AC_DEFUN], + m4_version_prereq([2.64], + [[AC_DEFUN_ONCE( + [$1], [$2])]], + [m4_ifdef([gl_00GNULIB], + [[AC_DEFUN_ONCE( + [$1], [$2])]], + [[AC_DEFUN( + [$1], [$2])]])])) +gl_iconv_AC_DEFUN([AM_ICONV], +[ + AM_ICONV_LINK + if test "$am_cv_func_iconv" = yes; then + AC_MSG_CHECKING([for iconv declaration]) + AC_CACHE_VAL([am_cv_proto_iconv], [ + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +#include +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) +size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); +#else +size_t iconv(); +#endif + ]], + [[]])], + [am_cv_proto_iconv_arg1=""], + [am_cv_proto_iconv_arg1="const"]) + am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) + am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` + AC_MSG_RESULT([ + $am_cv_proto_iconv]) + else + dnl When compiling GNU libiconv on a system that does not have iconv yet, + dnl pick the POSIX compliant declaration without 'const'. + am_cv_proto_iconv_arg1="" + fi + AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1], + [Define as const if the declaration of iconv() needs const.]) + dnl Also substitute ICONV_CONST in the gnulib generated . + m4_ifdef([gl_ICONV_H_DEFAULTS], + [AC_REQUIRE([gl_ICONV_H_DEFAULTS]) + if test -n "$am_cv_proto_iconv_arg1"; then + ICONV_CONST="const" fi - else - posrcprefix="../" - fi - rm -f po/POTFILES - sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ - < $srcdir/po/POTFILES.in > po/POTFILES - ], - [[$0: This macro is deprecated. You should use upstream gettext instead.]]) - -# AM_GLIB_DEFINE_LOCALEDIR(VARIABLE) -# ------------------------------- -# Define VARIABLE to the location where catalog files will -# be installed by po/Makefile. -glib_DEFUN([GLIB_DEFINE_LOCALEDIR], -[glib_REQUIRE([GLIB_GNU_GETTEXT])dnl -glib_save_prefix="$prefix" -glib_save_exec_prefix="$exec_prefix" -glib_save_datarootdir="$datarootdir" -test "x$prefix" = xNONE && prefix=$ac_default_prefix -test "x$exec_prefix" = xNONE && exec_prefix=$prefix -datarootdir=`eval echo "${datarootdir}"` -if test "x$CATOBJEXT" = "x.mo" ; then - localedir=`eval echo "${libdir}/locale"` -else - localedir=`eval echo "${datadir}/locale"` -fi -prefix="$glib_save_prefix" -exec_prefix="$glib_save_exec_prefix" -datarootdir="$glib_save_datarootdir" -AC_DEFINE_UNQUOTED($1, "$localedir", - [Define the location where the catalogs will be installed]) + ]) ]) +# intlmacosx.m4 serial 8 (gettext-0.20.2) +dnl Copyright (C) 2004-2014, 2016, 2019-2020 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. dnl -dnl Now the definitions that aclocal will find -dnl -ifdef(glib_configure_ac,[],[ -AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)]) -AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)]) -])dnl - -# GLIB_RUN_PROG(PROGRAM, TEST-FILE, [ACTION-IF-PASS], [ACTION-IF-FAIL]) -# -# Create a temporary file with TEST-FILE as its contents and pass the -# file name to PROGRAM. Perform ACTION-IF-PASS if PROGRAM exits with -# 0 and perform ACTION-IF-FAIL for any other exit status. -AC_DEFUN([GLIB_RUN_PROG], -[cat >conftest.foo <<_ACEOF -$2 -_ACEOF -if AC_RUN_LOG([$1 conftest.foo]); then - m4_ifval([$3], [$3], [:]) -m4_ifvaln([$4], [else $4])dnl -echo "$as_me: failed input was:" >&AS_MESSAGE_LOG_FD -sed 's/^/| /' conftest.foo >&AS_MESSAGE_LOG_FD -fi]) +dnl This file can be used in projects which are not available under +dnl the GNU General Public License or the GNU Lesser General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Lesser General Public License, and the rest of the GNU +dnl gettext package is covered by the GNU General Public License. +dnl They are *not* in the public domain. +dnl Checks for special options needed on Mac OS X. +dnl Defines INTL_MACOSX_LIBS. +AC_DEFUN([gt_INTL_MACOSX], +[ + dnl Check for API introduced in Mac OS X 10.4. + AC_CACHE_CHECK([for CFPreferencesCopyAppValue], + [gt_cv_func_CFPreferencesCopyAppValue], + [gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include ]], + [[CFPreferencesCopyAppValue(NULL, NULL)]])], + [gt_cv_func_CFPreferencesCopyAppValue=yes], + [gt_cv_func_CFPreferencesCopyAppValue=no]) + LIBS="$gt_save_LIBS"]) + if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then + AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1], + [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) + fi + dnl Don't check for the API introduced in Mac OS X 10.5, CFLocaleCopyCurrent, + dnl because in macOS 10.13.4 it has the following behaviour: + dnl When two or more languages are specified in the + dnl "System Preferences > Language & Region > Preferred Languages" panel, + dnl it returns en_CC where CC is the territory (even when English is not among + dnl the preferred languages!). What we want instead is what + dnl CFLocaleCopyCurrent returned in earlier macOS releases and what + dnl CFPreferencesCopyAppValue still returns, namely ll_CC where ll is the + dnl first among the preferred languages and CC is the territory. + AC_CACHE_CHECK([for CFLocaleCopyPreferredLanguages], [gt_cv_func_CFLocaleCopyPreferredLanguages], + [gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include ]], + [[CFLocaleCopyPreferredLanguages();]])], + [gt_cv_func_CFLocaleCopyPreferredLanguages=yes], + [gt_cv_func_CFLocaleCopyPreferredLanguages=no]) + LIBS="$gt_save_LIBS"]) + if test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then + AC_DEFINE([HAVE_CFLOCALECOPYPREFERREDLANGUAGES], [1], + [Define to 1 if you have the Mac OS X function CFLocaleCopyPreferredLanguages in the CoreFoundation framework.]) + fi + INTL_MACOSX_LIBS= + if test $gt_cv_func_CFPreferencesCopyAppValue = yes \ + || test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then + INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" + fi + AC_SUBST([INTL_MACOSX_LIBS]) +]) dnl IT_PROG_INTLTOOL([MINIMUM-VERSION], [no-xml]) @@ -668,24 +1599,1315 @@ AU_ALIAS([AC_PROG_INTLTOOL], [IT_PROG_INTLTOOL]) # AC_DEFUN([AC_PROG_INTLTOOL], ...) -# nls.m4 serial 5 (gettext-0.18) -dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014, 2016 Free Software -dnl Foundation, Inc. +# lib-ld.m4 serial 9 +dnl Copyright (C) 1996-2003, 2009-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. -dnl -dnl This file can be used in projects which are not available under -dnl the GNU General Public License or the GNU Library General Public -dnl License but which still want to provide support for the GNU gettext -dnl functionality. -dnl Please note that the actual code of the GNU gettext library is covered -dnl by the GNU Library General Public License, and the rest of the GNU -dnl gettext package is covered by the GNU General Public License. -dnl They are *not* in the public domain. -dnl Authors: -dnl Ulrich Drepper , 1995-2000. +dnl Subroutines of libtool.m4, +dnl with replacements s/_*LT_PATH/AC_LIB_PROG/ and s/lt_/acl_/ to avoid +dnl collision with libtool.m4. + +dnl From libtool-2.4. Sets the variable with_gnu_ld to yes or no. +AC_DEFUN([AC_LIB_PROG_LD_GNU], +[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld], +[# I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 /dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +if test -n "$LD"; then + AC_MSG_CHECKING([for ld]) +elif test "$GCC" = yes; then + AC_MSG_CHECKING([for ld used by $CC]) +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +if test -n "$LD"; then + # Let the user override the test with a path. + : +else + AC_CACHE_VAL([acl_cv_path_LD], + [ + acl_cv_path_LD= # Final result of this test + ac_prog=ld # Program to search in $PATH + if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + acl_output=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + acl_output=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $acl_output in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + acl_output=`echo "$acl_output" | sed 's%\\\\%/%g'` + while echo "$acl_output" | grep "$re_direlt" > /dev/null 2>&1; do + acl_output=`echo $acl_output | sed "s%$re_direlt%/%"` + done + # Got the pathname. No search in PATH is needed. + acl_cv_path_LD="$acl_output" + ac_prog= + ;; + "") + # If it fails, then pretend we aren't using GCC. + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac + fi + if test -n "$ac_prog"; then + # Search for $ac_prog in $PATH. + acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$acl_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$acl_cv_path_LD" -v 2>&1 conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + ]) + wl="$acl_cv_wl" + acl_libext="$acl_cv_libext" + acl_shlibext="$acl_cv_shlibext" + acl_libname_spec="$acl_cv_libname_spec" + acl_library_names_spec="$acl_cv_library_names_spec" + acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + acl_hardcode_direct="$acl_cv_hardcode_direct" + acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" + dnl Determine whether the user wants rpath handling at all. + AC_ARG_ENABLE([rpath], + [ --disable-rpath do not hardcode runtime library paths], + :, enable_rpath=yes) +]) + +dnl AC_LIB_FROMPACKAGE(name, package) +dnl declares that libname comes from the given package. The configure file +dnl will then not have a --with-libname-prefix option but a +dnl --with-package-prefix option. Several libraries can come from the same +dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar +dnl macro call that searches for libname. +AC_DEFUN([AC_LIB_FROMPACKAGE], +[ + pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) + define([acl_frompackage_]NAME, [$2]) + popdef([NAME]) + pushdef([PACK],[$2]) + pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) + define([acl_libsinpackage_]PACKUP, + m4_ifdef([acl_libsinpackage_]PACKUP, [m4_defn([acl_libsinpackage_]PACKUP)[, ]],)[lib$1]) + popdef([PACKUP]) + popdef([PACK]) +]) + +dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. +dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found +dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. +AC_DEFUN([AC_LIB_LINKFLAGS_BODY], +[ + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) + pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) + pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) + pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" + eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" + ]) + AC_ARG_WITH(PACK[-prefix], +[[ --with-]]PACK[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib + --without-]]PACK[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" + eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + additional_libdir2="$withval/$acl_libdirstem2" + additional_libdir3="$withval/$acl_libdirstem3" + fi + fi +]) + if test "X$additional_libdir2" = "X$additional_libdir"; then + additional_libdir2= + fi + if test "X$additional_libdir3" = "X$additional_libdir"; then + additional_libdir3= + fi + dnl Search the library and its dependencies in $additional_libdir and + dnl $LDFLAGS. Using breadth-first-seach. + LIB[]NAME= + LTLIB[]NAME= + INC[]NAME= + LIB[]NAME[]_PREFIX= + dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been + dnl computed. So it has to be reset here. + HAVE_LIB[]NAME= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='$1 $2' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + dnl See if it was already located by an earlier AC_LIB_LINKFLAGS + dnl or AC_LIB_HAVE_LINKFLAGS call. + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" + else + dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined + dnl that this library doesn't exist. So just drop it. + : + fi + else + dnl Search the library lib$name in $additional_libdir and $LDFLAGS + dnl and the already constructed $LIBNAME/$LTLIBNAME. + found_dir= + found_la= + found_so= + found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi + if test $use_additional = yes; then + for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do + if test "X$found_dir" = "X"; then + eval dir=\$$additional_libdir_variable + if test -n "$dir"; then + dnl The same code as in the loop below: + dnl First look for a shared library. + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + dnl Then look for a static library. + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + fi + fi + done + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + dnl First look for a shared library. + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + dnl Then look for a static library. + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + dnl Found the library. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + dnl Linking with a shared library. We attempt to hardcode its + dnl directory into the executable's runpath, unless it's the + dnl standard /usr/lib. + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then + dnl No hardcoding is needed. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + dnl The hardcoding into $LIBNAME is system dependent. + if test "$acl_hardcode_direct" = yes; then + dnl Using DIR/libNAME.so during linking hardcodes DIR into the + dnl resulting binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + dnl Rely on "-L$found_dir". + dnl But don't add it if it's already contained in the LDFLAGS + dnl or the already constructed $LIBNAME + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" + fi + if test "$acl_hardcode_minus_L" != no; then + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH + dnl here, because this doesn't fit in flags passed to the + dnl compiler. So give up. No hardcoding. This affects only + dnl very old systems. + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + dnl Linking with a static library. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" + else + dnl We shouldn't come here, but anyway it's good to have a + dnl fallback. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" + fi + fi + dnl Assume the include files are nearby. + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = '$1'; then + LIB[]NAME[]_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = '$1'; then + LIB[]NAME[]_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem3 | */$acl_libdirstem3/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` + if test "$name" = '$1'; then + LIB[]NAME[]_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + dnl Potentially add $additional_includedir to $INCNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's /usr/local/include and we are using GCC on Linux, + dnl 3. if it's already present in $CPPFLAGS or the already + dnl constructed $INCNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INC[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $INCNAME. + INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + dnl Look for dependencies. + if test -n "$found_la"; then + dnl Read the .la file. It defines the variables + dnl dlname, library_names, old_library, dependency_libs, current, + dnl age, revision, installed, dlopen, dlpreopen, libdir. + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + dnl We use only dependency_libs. + for dep in $dependency_libs; do + case "$dep" in + -L*) + dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + dnl Potentially add $dependency_libdir to $LIBNAME and $LTLIBNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's /usr/local/lib and we are using GCC on Linux, + dnl 3. if it's already present in $LDFLAGS or the already + dnl constructed $LIBNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ + && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then + haveit= + if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ + || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$dependency_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$dependency_libdir"; then + dnl Really add $dependency_libdir to $LIBNAME. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$dependency_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$dependency_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$dependency_libdir"; then + dnl Really add $dependency_libdir to $LTLIBNAME. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$dependency_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + dnl Handle this in the next round. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + dnl Handle this in the next round. Throw away the .la's + dnl directory; it is already contained in a preceding -L + dnl option. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + dnl Most likely an immediate library name. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" + ;; + esac + done + fi + else + dnl Didn't find the library; assume it is in the system directories + dnl known to the linker and runtime loader. (All the system + dnl directories known to the linker should also be known to the + dnl runtime loader, otherwise the system is severely misconfigured.) + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$acl_hardcode_libdir_separator"; then + dnl Weird platform: only the last -rpath option counts, the user must + dnl pass all path elements in one option. We can arrange that for a + dnl single library, but not when more than one $LIBNAMEs are used. + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" + done + dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + else + dnl The -rpath options are cumulative. + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + dnl When using libtool, the option that works for both libraries and + dnl executables is -R. The -R options are cumulative. + for found_dir in $ltrpathdirs; do + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" + done + fi + popdef([PACKLIBS]) + popdef([PACKUP]) + popdef([PACK]) + popdef([NAME]) +]) + +dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, +dnl unless already present in VAR. +dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes +dnl contains two or three consecutive elements that belong together. +AC_DEFUN([AC_LIB_APPENDTOVAR], +[ + for element in [$2]; do + haveit= + for x in $[$1]; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + [$1]="${[$1]}${[$1]:+ }$element" + fi + done +]) + +dnl For those cases where a variable contains several -L and -l options +dnl referring to unknown libraries and directories, this macro determines the +dnl necessary additional linker options for the runtime path. +dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) +dnl sets LDADDVAR to linker options needed together with LIBSVALUE. +dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, +dnl otherwise linking without libtool is assumed. +AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], +[ + AC_REQUIRE([AC_LIB_RPATH]) + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + $1= + if test "$enable_rpath" != no; then + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + dnl Use an explicit option to hardcode directories into the resulting + dnl binary. + rpathdirs= + next= + for opt in $2; do + if test -n "$next"; then + dir="$next" + dnl No need to hardcode the standard /usr/lib. + if test "X$dir" != "X/usr/$acl_libdirstem" \ + && test "X$dir" != "X/usr/$acl_libdirstem2" \ + && test "X$dir" != "X/usr/$acl_libdirstem3"; then + rpathdirs="$rpathdirs $dir" + fi + next= + else + case $opt in + -L) next=yes ;; + -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` + dnl No need to hardcode the standard /usr/lib. + if test "X$dir" != "X/usr/$acl_libdirstem" \ + && test "X$dir" != "X/usr/$acl_libdirstem2" \ + && test "X$dir" != "X/usr/$acl_libdirstem3"; then + rpathdirs="$rpathdirs $dir" + fi + next= ;; + *) next= ;; + esac + fi + done + if test "X$rpathdirs" != "X"; then + if test -n ""$3""; then + dnl libtool is used for linking. Use -R options. + for dir in $rpathdirs; do + $1="${$1}${$1:+ }-R$dir" + done + else + dnl The linker is used for linking directly. + if test -n "$acl_hardcode_libdir_separator"; then + dnl Weird platform: only the last -rpath option counts, the user + dnl must pass all path elements in one option. + alldirs= + for dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + $1="$flag" + else + dnl The -rpath options are cumulative. + for dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + $1="${$1}${$1:+ }$flag" + done + fi + fi + fi + fi + fi + AC_SUBST([$1]) +]) + +# lib-prefix.m4 serial 17 +dnl Copyright (C) 2001-2005, 2008-2020 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed +dnl to access previously installed libraries. The basic assumption is that +dnl a user will want packages to use other packages he previously installed +dnl with the same --prefix option. +dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate +dnl libraries, but is otherwise very convenient. +AC_DEFUN([AC_LIB_PREFIX], +[ + AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_ARG_WITH([lib-prefix], +[[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib + --without-lib-prefix don't search for libraries in includedir and libdir]], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + fi + fi +]) + if test $use_additional = yes; then + dnl Potentially add $additional_includedir to $CPPFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's already present in $CPPFLAGS, + dnl 3. if it's /usr/local/include and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + for x in $CPPFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $CPPFLAGS. + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" + fi + fi + fi + fi + dnl Potentially add $additional_libdir to $LDFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's already present in $LDFLAGS, + dnl 3. if it's /usr/local/lib and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then + haveit= + for x in $LDFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LDFLAGS. + LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" + fi + fi + fi + fi + fi +]) + +dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, +dnl acl_final_exec_prefix, containing the values to which $prefix and +dnl $exec_prefix will expand at the end of the configure script. +AC_DEFUN([AC_LIB_PREPARE_PREFIX], +[ + dnl Unfortunately, prefix and exec_prefix get only finally determined + dnl at the end of configure. + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" +]) + +dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the +dnl variables prefix and exec_prefix bound to the values they will have +dnl at the end of the configure script. +AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], +[ + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + $1 + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" +]) + +dnl AC_LIB_PREPARE_MULTILIB creates +dnl - a function acl_is_expected_elfclass, that tests whether standard input +dn; has a 32-bit or 64-bit ELF header, depending on the host CPU ABI, +dnl - 3 variables acl_libdirstem, acl_libdirstem2, acl_libdirstem3, containing +dnl the basename of the libdir to try in turn, either "lib" or "lib64" or +dnl "lib/64" or "lib32" or "lib/sparcv9" or "lib/amd64" or similar. +AC_DEFUN([AC_LIB_PREPARE_MULTILIB], +[ + dnl There is no formal standard regarding lib, lib32, and lib64. + dnl On most glibc systems, the current practice is that on a system supporting + dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under + dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. However, on + dnl Arch Linux based distributions, it's the opposite: 32-bit libraries go + dnl under $prefix/lib32 and 64-bit libraries go under $prefix/lib. + dnl We determine the compiler's default mode by looking at the compiler's + dnl library search path. If at least one of its elements ends in /lib64 or + dnl points to a directory whose absolute pathname ends in /lib64, we use that + dnl for 64-bit ABIs. Similarly for 32-bit ABIs. Otherwise we use the default, + dnl namely "lib". + dnl On Solaris systems, the current practice is that on a system supporting + dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under + dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or + dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib. + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([gl_HOST_CPU_C_ABI_32BIT]) + + AC_CACHE_CHECK([for ELF binary format], [gl_cv_elf], + [AC_EGREP_CPP([Extensible Linking Format], + [#ifdef __ELF__ + Extensible Linking Format + #endif + ], + [gl_cv_elf=yes], + [gl_cv_elf=no]) + ]) + if test $gl_cv_elf; then + # Extract the ELF class of a file (5th byte) in decimal. + # Cf. https://en.wikipedia.org/wiki/Executable_and_Linkable_Format#File_header + if od -A x < /dev/null >/dev/null 2>/dev/null; then + # Use POSIX od. + func_elfclass () + { + od -A n -t d1 -j 4 -N 1 + } + else + # Use BSD hexdump. + func_elfclass () + { + dd bs=1 count=1 skip=4 2>/dev/null | hexdump -e '1/1 "%3d "' + echo + } + fi +changequote(,)dnl + case $HOST_CPU_C_ABI_32BIT in + yes) + # 32-bit ABI. + acl_is_expected_elfclass () + { + test "`func_elfclass | sed -e 's/[ ]//g'`" = 1 + } + ;; + no) + # 64-bit ABI. + acl_is_expected_elfclass () + { + test "`func_elfclass | sed -e 's/[ ]//g'`" = 2 + } + ;; + *) + # Unknown. + acl_is_expected_elfclass () + { + : + } + ;; + esac +changequote([,])dnl + else + acl_is_expected_elfclass () + { + : + } + fi + + dnl Allow the user to override the result by setting acl_cv_libdirstems. + AC_CACHE_CHECK([for the common suffixes of directories in the library search path], + [acl_cv_libdirstems], + [dnl Try 'lib' first, because that's the default for libdir in GNU, see + dnl . + acl_libdirstem=lib + acl_libdirstem2= + acl_libdirstem3= + case "$host_os" in + solaris*) + dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment + dnl . + dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." + dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the + dnl symlink is missing, so we set acl_libdirstem2 too. + if test $HOST_CPU_C_ABI_32BIT = no; then + acl_libdirstem2=lib/64 + case "$host_cpu" in + sparc*) acl_libdirstem3=lib/sparcv9 ;; + i*86 | x86_64) acl_libdirstem3=lib/amd64 ;; + esac + fi + ;; + *) + dnl If $CC generates code for a 32-bit ABI, the libraries are + dnl surely under $prefix/lib or $prefix/lib32, not $prefix/lib64. + dnl Similarly, if $CC generates code for a 64-bit ABI, the libraries + dnl are surely under $prefix/lib or $prefix/lib64, not $prefix/lib32. + dnl Find the compiler's search path. However, non-system compilers + dnl sometimes have odd library search paths. But we can't simply invoke + dnl '/usr/bin/gcc -print-search-dirs' because that would not take into + dnl account the -m32/-m31 or -m64 options from the $CC or $CFLAGS. + searchpath=`(LC_ALL=C $CC $CPPFLAGS $CFLAGS -print-search-dirs) 2>/dev/null \ + | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` + if test $HOST_CPU_C_ABI_32BIT != no; then + # 32-bit or unknown ABI. + if test -d /usr/lib32; then + acl_libdirstem2=lib32 + fi + fi + if test $HOST_CPU_C_ABI_32BIT != yes; then + # 64-bit or unknown ABI. + if test -d /usr/lib64; then + acl_libdirstem3=lib64 + fi + fi + if test -n "$searchpath"; then + acl_save_IFS="${IFS= }"; IFS=":" + for searchdir in $searchpath; do + if test -d "$searchdir"; then + case "$searchdir" in + */lib32/ | */lib32 ) acl_libdirstem2=lib32 ;; + */lib64/ | */lib64 ) acl_libdirstem3=lib64 ;; + */../ | */.. ) + # Better ignore directories of this form. They are misleading. + ;; + *) searchdir=`cd "$searchdir" && pwd` + case "$searchdir" in + */lib32 ) acl_libdirstem2=lib32 ;; + */lib64 ) acl_libdirstem3=lib64 ;; + esac ;; + esac + fi + done + IFS="$acl_save_IFS" + if test $HOST_CPU_C_ABI_32BIT = yes; then + # 32-bit ABI. + acl_libdirstem3= + fi + if test $HOST_CPU_C_ABI_32BIT = no; then + # 64-bit ABI. + acl_libdirstem2= + fi + fi + ;; + esac + test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" + test -n "$acl_libdirstem3" || acl_libdirstem3="$acl_libdirstem" + acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2,$acl_libdirstem3" + ]) + dnl Decompose acl_cv_libdirstems into acl_libdirstem, acl_libdirstem2, and + dnl acl_libdirstem3. +changequote(,)dnl + acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'` + acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,//' -e 's/,.*//'` + acl_libdirstem3=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,[^,]*,//' -e 's/,.*//'` +changequote([,])dnl +]) + +# nls.m4 serial 6 (gettext-0.20.2) +dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014, 2016, 2019-2020 Free +dnl Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can be used in projects which are not available under +dnl the GNU General Public License or the GNU Lesser General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Lesser General Public License, and the rest of the GNU +dnl gettext package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ([2.50]) @@ -701,6 +2923,549 @@ AC_DEFUN([AM_NLS], AC_SUBST([USE_NLS]) ]) +# po.m4 serial 31 (gettext-0.20.2) +dnl Copyright (C) 1995-2014, 2016, 2018-2020 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can be used in projects which are not available under +dnl the GNU General Public License or the GNU Lesser General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Lesser General Public License, and the rest of the GNU +dnl gettext package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995-2000. +dnl Bruno Haible , 2000-2003. + +AC_PREREQ([2.60]) + +dnl Checks for all prerequisites of the po subdirectory. +AC_DEFUN([AM_PO_SUBDIRS], +[ + AC_REQUIRE([AC_PROG_MAKE_SET])dnl + AC_REQUIRE([AC_PROG_INSTALL])dnl + AC_REQUIRE([AC_PROG_MKDIR_P])dnl + AC_REQUIRE([AC_PROG_SED])dnl + AC_REQUIRE([AM_NLS])dnl + + dnl Release version of the gettext macros. This is used to ensure that + dnl the gettext macros and po/Makefile.in.in are in sync. + AC_SUBST([GETTEXT_MACRO_VERSION], [0.20]) + + dnl Perform the following tests also if --disable-nls has been given, + dnl because they are needed for "make dist" to work. + + dnl Search for GNU msgfmt in the PATH. + dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. + dnl The second test excludes FreeBSD msgfmt. + AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && + (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], + :) + AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT]) + + dnl Test whether it is GNU msgfmt >= 0.15. +changequote(,)dnl + case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; + *) GMSGFMT_015=$GMSGFMT ;; + esac +changequote([,])dnl + AC_SUBST([GMSGFMT_015]) + + dnl Search for GNU xgettext 0.12 or newer in the PATH. + dnl The first test excludes Solaris xgettext and early GNU xgettext versions. + dnl The second test excludes FreeBSD xgettext. + AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && + (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], + :) + dnl Remove leftover from FreeBSD xgettext call. + rm -f messages.po + + dnl Test whether it is GNU xgettext >= 0.15. +changequote(,)dnl + case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; + *) XGETTEXT_015=$XGETTEXT ;; + esac +changequote([,])dnl + AC_SUBST([XGETTEXT_015]) + + dnl Search for GNU msgmerge 0.11 or newer in the PATH. + AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, + [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) + + dnl Test whether it is GNU msgmerge >= 0.20. + if LC_ALL=C $MSGMERGE --help | grep ' --for-msgfmt ' >/dev/null; then + MSGMERGE_FOR_MSGFMT_OPTION='--for-msgfmt' + else + dnl Test whether it is GNU msgmerge >= 0.12. + if LC_ALL=C $MSGMERGE --help | grep ' --no-fuzzy-matching ' >/dev/null; then + MSGMERGE_FOR_MSGFMT_OPTION='--no-fuzzy-matching --no-location --quiet' + else + dnl With these old versions, $(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) is + dnl slow. But this is not a big problem, as such old gettext versions are + dnl hardly in use any more. + MSGMERGE_FOR_MSGFMT_OPTION='--no-location --quiet' + fi + fi + AC_SUBST([MSGMERGE_FOR_MSGFMT_OPTION]) + + dnl Support for AM_XGETTEXT_OPTION. + test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= + AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) + + AC_CONFIG_COMMANDS([po-directories], [[ + for ac_file in $CONFIG_FILES; do + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + # PO directories have a Makefile.in generated from Makefile.in.in. + case "$ac_file" in */Makefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + # Treat a directory as a PO directory if and only if it has a + # POTFILES.in file. This allows packages to have multiple PO + # directories under different names or in different locations. + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" + gt_tab=`printf '\t'` + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" + POMAKEFILEDEPS="POTFILES.in" + # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend + # on $ac_dir but don't depend on user-specified configuration + # parameters. + if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then + # The LINGUAS file contains the set of available languages. + if test -n "$OBSOLETE_ALL_LINGUAS"; then + test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" + fi + ALL_LINGUAS=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` + POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" + else + # The set of available languages was given in configure.in. + ALL_LINGUAS=$OBSOLETE_ALL_LINGUAS + fi + # Compute POFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) + # Compute UPDATEPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) + # Compute DUMMYPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) + # Compute GMOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) + case "$ac_given_srcdir" in + .) srcdirpre= ;; + *) srcdirpre='$(srcdir)/' ;; + esac + POFILES= + UPDATEPOFILES= + DUMMYPOFILES= + GMOFILES= + for lang in $ALL_LINGUAS; do + POFILES="$POFILES $srcdirpre$lang.po" + UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" + DUMMYPOFILES="$DUMMYPOFILES $lang.nop" + GMOFILES="$GMOFILES $srcdirpre$lang.gmo" + done + # CATALOGS depends on both $ac_dir and the user's LINGUAS + # environment variable. + INST_LINGUAS= + if test -n "$ALL_LINGUAS"; then + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "$LINGUAS"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + INST_LINGUAS="$INST_LINGUAS $presentlang" + fi + done + fi + CATALOGS= + if test -n "$INST_LINGUAS"; then + for lang in $INST_LINGUAS; do + CATALOGS="$CATALOGS $lang.gmo" + done + fi + test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" + sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" + for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do + if test -f "$f"; then + case "$f" in + *.orig | *.bak | *~) ;; + *) cat "$f" >> "$ac_dir/Makefile" ;; + esac + fi + done + fi + ;; + esac + done]], + [# Capture the value of obsolete ALL_LINGUAS because we need it to compute + # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. + OBSOLETE_ALL_LINGUAS="$ALL_LINGUAS" + # Capture the value of LINGUAS because we need it to compute CATALOGS. + LINGUAS="${LINGUAS-%UNSET%}" + ]) +]) + +dnl Postprocesses a Makefile in a directory containing PO files. +AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], +[ + # When this code is run, in config.status, two variables have already been + # set: + # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, + # - LINGUAS is the value of the environment variable LINGUAS at configure + # time. + +changequote(,)dnl + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + # Find a way to echo strings without interpreting backslash. + if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then + gt_echo='echo' + else + if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then + gt_echo='printf %s\n' + else + echo_func () { + cat < "$ac_file.tmp" + tab=`printf '\t'` + if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then + # Add dependencies that cannot be formulated as a simple suffix rule. + for lang in $ALL_LINGUAS; do + frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` + cat >> "$ac_file.tmp" < /dev/null; then + # Add dependencies that cannot be formulated as a simple suffix rule. + for lang in $ALL_LINGUAS; do + frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` + cat >> "$ac_file.tmp" <> "$ac_file.tmp" <, 1996. + +AC_PREREQ([2.50]) + +# Search path for a program which passes the given test. + +dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, +dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) +AC_DEFUN([AM_PATH_PROG_WITH_TEST], +[ +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "$2", so it can be a program name with args. +set dummy $2; ac_word=[$]2 +AC_MSG_CHECKING([for $ac_word]) +AC_CACHE_VAL([ac_cv_path_$1], +[case "[$]$1" in + [[\\/]]* | ?:[[\\/]]*) + ac_cv_path_$1="[$]$1" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in ifelse([$5], , $PATH, [$5]); do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD + if [$3]; then + ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" +dnl If no 4th arg is given, leave the cache variable unset, +dnl so AC_PATH_PROGS will keep looking. +ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" +])dnl + ;; +esac])dnl +$1="$ac_cv_path_$1" +if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then + AC_MSG_RESULT([$][$1]) +else + AC_MSG_RESULT([no]) +fi +AC_SUBST([$1])dnl +]) + # Copyright (C) 2006-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation diff --git a/android/Makefile b/android/Makefile index 8484fb69..7c701886 100644 --- a/android/Makefile +++ b/android/Makefile @@ -226,7 +226,7 @@ export ANDROID_HACKS= \ queens \ raverhoop \ razzledazzle \ - rd-bomb \ + rdbomb \ ripples \ rocks \ romanboy \ @@ -248,6 +248,7 @@ export ANDROID_HACKS= \ splodesic \ spotlight \ squiral \ + squirtorus \ stairs \ starwars \ stonerview \ @@ -305,7 +306,7 @@ URL = https://www.jwz.org/xscreensaver/screenshots/ # I find wget easier to deal with, but curl is usually installed by default. #WGET = wget -q -U xscreensaver-build-android --content-on-error=0 -O- -WGET = curl -s -A xscreensaver-build-android -f +WGET = curl -sL -A xscreensaver-build-android -f # ImageMagick isn't installed by default, but neither is anything similar. CVT = -thumbnail '150x150^' -gravity center -extent 150x150 \ @@ -335,8 +336,6 @@ xscreensaver/res/drawable/%.png: @\ FILE1=`echo "$@" | sed 's!^.*/\([^/]*\)\.png$$!\1.jpg!'` ; \ FILE2="$@" ; \ - FILE1=`echo "$$FILE1" | sed s/rdbomb/rd-bomb/` ; \ - FILE2=`echo "$$FILE2" | sed s/rd-bomb/rdbomb/` ; \ URL="$(URL)$$FILE1" ; \ echo "converting $$URL..." ; \ rm -f "$$FILE2" ; \ diff --git a/android/README b/android/README index 4b880d89..3ae5fe61 100644 --- a/android/README +++ b/android/README @@ -308,6 +308,8 @@ When adding a new hack, edit android/Makefile, then "make clean" and "make". - Search for "Google play developer console". - When that doesn't work search for "play console" "create a release". + - The button is in the upper right, lately. + - You might need to use Chrome instead of Safari. - Drag and drop the APK. - Next Google will complain that "Your app currently targets API level N". diff --git a/android/xscreensaver/jni/Android.mk b/android/xscreensaver/jni/Android.mk index ac3e0fab..d94ff711 100644 --- a/android/xscreensaver/jni/Android.mk +++ b/android/xscreensaver/jni/Android.mk @@ -104,6 +104,7 @@ LOCAL_SRC_FILES += \ hacks/glx/swim.c \ hacks/glx/tangram_shapes.c \ hacks/glx/teapot.c \ + hacks/glx/timezones.c \ hacks/glx/toast.c \ hacks/glx/toast2.c \ hacks/glx/toaster.c \ @@ -120,6 +121,8 @@ LOCAL_SRC_FILES += \ hacks/glx/tronbit_yes.c \ hacks/glx/tunnel_draw.c \ hacks/glx/whale.c \ + hacks/glx/sphereeversion-analytic.c \ + hacks/glx/sphereeversion-corrugations.c \ # The source files of the currently active GL hacks: LOCAL_SRC_FILES += $(shell \ diff --git a/config.h.in b/config.h.in index 451dd612..12a6ae06 100644 --- a/config.h.in +++ b/config.h.in @@ -9,7 +9,8 @@ /* Define this to allow root to unlock, when not using PAM. */ #undef ALLOW_ROOT_PASSWD -/* always defined to indicate that i18n is enabled */ +/* Define to 1 if translation of program messages to the user's native + language is requested. */ #undef ENABLE_NLS /* This is the name of the gettext package to use. */ @@ -21,12 +22,9 @@ /* Define this for Solaris getpwanam. */ #undef HAVE_ADJUNCT_PASSWD -/* Define to 1 if you have the `bind_textdomain_codeset' function. */ -#undef HAVE_BIND_TEXTDOMAIN_CODESET - -/* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the - CoreFoundation framework. */ -#undef HAVE_CFLOCALECOPYCURRENT +/* Define to 1 if you have the Mac OS X function + CFLocaleCopyPreferredLanguages in the CoreFoundation framework. */ +#undef HAVE_CFLOCALECOPYPREFERREDLANGUAGES /* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework. */ @@ -43,7 +41,8 @@ /* Define to 1 if you have the header file. */ #undef HAVE_CRYPT_H -/* Define to 1 if you have the `dcgettext' function. */ +/* Define if the GNU dcgettext() function is already present or preinstalled. + */ #undef HAVE_DCGETTEXT /* Define to 1 if you have the header file, and it defines `DIR'. @@ -132,6 +131,9 @@ /* Define this if ping uses struct icmphdr.un.echo.id. */ #undef HAVE_ICMPHDR +/* Define if you have the iconv() function and it works. */ +#undef HAVE_ICONV + /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H @@ -148,9 +150,6 @@ /* Define this if you have Kerberos 5. */ #undef HAVE_KERBEROS5 -/* Define if your file defines LC_MESSAGES. */ -#undef HAVE_LC_MESSAGES - /* Define this if your system has libcap. */ #undef HAVE_LIBCAP @@ -163,8 +162,8 @@ /* Define this if you have libsystemd. */ #undef HAVE_LIBSYSTEMD -/* Define to 1 if you have the header file. */ -#undef HAVE_LOCALE_H +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H /* Using the MIT-SCREEN-SAVER extension means that the X server will crash at random times, and fading and hysteresis won't work. Don't use this. You'll @@ -265,9 +264,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H -/* Define to 1 if you have the header file. */ -#undef HAVE_STDIO_H - /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H @@ -393,9 +389,7 @@ /* Return type of signal handlers */ #undef RETSIGTYPE -/* Define to 1 if all of the C90 standard headers exist (not just the ones - required in a freestanding environment). This macro is provided for - backward compatibility; new code need not use it. */ +/* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Stare into the void. */ @@ -404,6 +398,11 @@ /* Define to 1 if the X Window System is missing or not being used. */ #undef X_DISPLAY_MISSING +/* Enable large inode numbers on Mac OS X 10.5. */ +#ifndef _DARWIN_USE_64_BIT_INODE +# define _DARWIN_USE_64_BIT_INODE 1 +#endif + /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS @@ -422,7 +421,7 @@ /* Define to `int' if does not define. */ #undef mode_t -/* Define as a signed integer type capable of holding a process identifier. */ +/* Define to `int' if does not define. */ #undef pid_t /* Define to `unsigned int' if does not define. */ diff --git a/configure b/configure index 58884093..0eabc90e 100755 --- a/configure +++ b/configure @@ -1,10 +1,9 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71. +# Generated by GNU Autoconf 2.69. # # -# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, -# Inc. +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation @@ -15,16 +14,14 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -as_nop=: -if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 -then : +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else $as_nop +else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -33,45 +30,46 @@ else $as_nop esac fi -# Reset variables that may have inherited troublesome values from -# the environment. - -# IFS needs to be set, to space, tab, and newline, in precisely that order. -# (If _AS_PATH_WALK were called with IFS unset, it would have the -# side effect of setting IFS to empty, thus disabling word splitting.) -# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -IFS=" "" $as_nl" - -PS1='$ ' -PS2='> ' -PS4='+ ' - -# Ensure predictable behavior from utilities with locale-dependent output. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# We cannot yet rely on "unset" to work, but we need these variables -# to be unset--not just set to an empty or harmless value--now, to -# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct -# also avoids known problems related to "unset" and subshell syntax -# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). -for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH -do eval test \${$as_var+y} \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done - -# Ensure that fds 0, 1, and 2 are open. -if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi -if (exec 3>&2) ; then :; else exec 2>/dev/null; fi +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi # The user is always right. -if ${PATH_SEPARATOR+false} :; then +if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -79,6 +77,13 @@ if ${PATH_SEPARATOR+false} :; then } fi +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -87,12 +92,8 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - test -r "$as_dir$0" && as_myself=$as_dir$0 && break + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS @@ -104,10 +105,31 @@ if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then @@ -128,22 +150,20 @@ esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 -exit 255 +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="as_nop=: -if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 -then : + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST -else \$as_nop +else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( @@ -163,53 +183,42 @@ as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ) -then : +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : -else \$as_nop +else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 -blah=\$(echo \$(echo blah)) -test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null -then : + if (eval "$as_required") 2>/dev/null; then : as_have_required=yes -else $as_nop +else as_have_required=no fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null -then : + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : -else $as_nop +else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. - as_shell=$as_dir$as_base + as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null -then : + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes - if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null -then : + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi @@ -217,20 +226,13 @@ fi esac as_found=false done -IFS=$as_save_IFS -if $as_found -then : - -else $as_nop - if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null -then : +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes -fi -fi +fi; } +IFS=$as_save_IFS - if test "x$CONFIG_SHELL" != x -then : + if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also @@ -248,19 +250,18 @@ esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi - if test x$as_have_required = xno -then : - printf "%s\n" "$0: This script requires a shell more modern than all" - printf "%s\n" "$0: the shells that I found on your system." - if test ${ZSH_VERSION+y} ; then - printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" - printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." else - printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system, + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." @@ -304,14 +305,6 @@ as_fn_exit () as_fn_set_status $1 exit $1 } # as_fn_exit -# as_fn_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop # as_fn_mkdir_p # ------------- @@ -326,7 +319,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -335,7 +328,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X"$as_dir" | +$as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -373,13 +366,12 @@ as_fn_executable_p () # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null -then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' -else $as_nop +else as_fn_append () { eval $1=\$$1\$2 @@ -391,28 +383,18 @@ fi # as_fn_append # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null -then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else $as_nop +else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith -# as_fn_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop - # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are @@ -423,9 +405,9 @@ as_fn_error () as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - printf "%s\n" "$as_me: error: $2" >&2 + $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error @@ -452,7 +434,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X/"$0" | +$as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -495,7 +477,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || - { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall @@ -509,9 +491,6 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits exit } -# Determine whether it's possible to make 'echo' print without a newline. -# These variables are no longer used directly by Autoconf, but are AC_SUBSTed -# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -525,12 +504,6 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac -# For backward compatibility with old third-party macros, we provide -# the shell variables $as_echo and $as_echo_n. New code should use -# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. -as_echo='printf %s\n' -as_echo_n='printf %s' - rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -595,46 +568,51 @@ MFLAGS= MAKEFLAGS= # Identity of this package. -PACKAGE_NAME='' -PACKAGE_TARNAME='' -PACKAGE_VERSION='' -PACKAGE_STRING='' -PACKAGE_BUGREPORT='' -PACKAGE_URL='' +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= +PACKAGE_URL= ac_unique_file="driver/subprocs.c" # Factoring default headers for most tests. ac_includes_default="\ -#include -#ifdef HAVE_STDIO_H -# include +#include +#ifdef HAVE_SYS_TYPES_H +# include #endif -#ifdef HAVE_STDLIB_H +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS # include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif #endif #ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif # include #endif +#ifdef HAVE_STRINGS_H +# include +#endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif #ifdef HAVE_UNISTD_H # include #endif" -ac_header_c_list= +gt_needs= ac_subst_vars='LTLIBOBJS LIBOBJS DEPEND_DEFINES @@ -711,7 +689,6 @@ PTHREAD_LIBS PTHREAD_CXX PTHREAD_CC ax_pthread_config -SED target_os target_vendor target_cpu @@ -719,21 +696,21 @@ target login_manager_tmp gnome_url_show_program gnome_open_program -EGREP -GREP -MKINSTALLDIRS +CATALOGS POSUB -POFILES -PO_IN_DATADIR_FALSE -PO_IN_DATADIR_TRUE +LTLIBINTL +LIBINTL INTLLIBS -INSTOBJEXT -GMOFILES -DATADIRNAME -CATOBJEXT -CATALOGS -MSGFMT_OPTS +LTLIBICONV +LIBICONV INTL_MACOSX_LIBS +XGETTEXT_EXTRA_OPTIONS +MSGMERGE_FOR_MSGFMT_OPTION +XGETTEXT_015 +GMSGFMT_015 +GETTEXT_MACRO_VERSION +SED +MKDIR_P GETTEXT_PACKAGE ALL_LINGUAS GMSGFMT @@ -777,6 +754,8 @@ X_PRE_LIBS X_CFLAGS XMKMF PERL +EGREP +GREP SET_MAKE INSTALL_DATA INSTALL_SCRIPT @@ -816,7 +795,6 @@ infodir docdir oldincludedir includedir -runstatedir localstatedir sharedstatedir sysconfdir @@ -842,6 +820,10 @@ enable_option_checking enable_largefile with_x enable_nls +with_gnu_ld +enable_rpath +with_libiconv_prefix +with_libintl_prefix with_app_defaults with_hackdir enable_subdir @@ -936,7 +918,6 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' -runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' @@ -966,6 +947,8 @@ do *) ac_optarg=yes ;; esac + # Accept the important Cygnus configure options, so we can diagnose typos. + case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; @@ -1006,9 +989,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: \`$ac_useropt'" + as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt - ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -1032,9 +1015,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: \`$ac_useropt'" + as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt - ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -1187,15 +1170,6 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; - -runstatedir | --runstatedir | --runstatedi | --runstated \ - | --runstate | --runstat | --runsta | --runst | --runs \ - | --run | --ru | --r) - ac_prev=runstatedir ;; - -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ - | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ - | --run=* | --ru=* | --r=*) - runstatedir=$ac_optarg ;; - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1245,9 +1219,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: \`$ac_useropt'" + as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt - ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1261,9 +1235,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: \`$ac_useropt'" + as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt - ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1307,9 +1281,9 @@ Try \`$0 --help' for more information" *) # FIXME: should be removed in autoconf 3.0. - printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; @@ -1325,7 +1299,7 @@ if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi @@ -1333,7 +1307,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir runstatedir + libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1387,7 +1361,7 @@ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X"$as_myself" | +$as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -1474,7 +1448,6 @@ For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --libexecdir=DIR program executables [EPREFIX/libexec] - --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] @@ -1600,9 +1573,9 @@ if test "$ac_init_help" = "recursive"; then case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -1630,8 +1603,7 @@ esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } - # Check for configure.gnu first; this name is used for a wrapper for - # Metaconfig's "Configure" on case-insensitive file systems. + # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive @@ -1639,7 +1611,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix echo && $SHELL "$ac_srcdir/configure" --help=recursive else - printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done @@ -1649,9 +1621,9 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure -generated by GNU Autoconf 2.71 +generated by GNU Autoconf 2.69 -Copyright (C) 2021 Free Software Foundation, Inc. +Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -1668,14 +1640,14 @@ fi ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -rf conftest.$ac_objext conftest.beam + rm -rf conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1683,15 +1655,14 @@ printf "%s\n" "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest.$ac_objext -then : + } && test -s conftest.$ac_objext; then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1713,7 +1684,7 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1721,15 +1692,14 @@ printf "%s\n" "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err - } -then : + }; then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1739,6 +1709,135 @@ fi } # ac_fn_c_try_cpp +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -rf conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in @@ -1746,28 +1845,26 @@ fi ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -printf %s "checking for $2... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" -else $as_nop +else eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile @@ -1779,18 +1876,17 @@ printf "%s\n" "$ac_res" >&6; } ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -printf %s "checking for $2... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main (void) +main () { if (sizeof ($2)) return 0; @@ -1798,13 +1894,12 @@ if (sizeof ($2)) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main (void) +main () { if (sizeof (($2))) return 0; @@ -1812,19 +1907,18 @@ if (sizeof (($2))) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -else $as_nop +else eval "$3=yes" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type @@ -1835,14 +1929,14 @@ printf "%s\n" "$ac_res" >&6; } ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -rf conftest.$ac_objext conftest.beam conftest$ac_exeext + rm -rf conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1850,18 +1944,17 @@ printf "%s\n" "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext - } -then : + }; then : ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1882,12 +1975,11 @@ fi ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -printf %s "checking for $2... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. @@ -1895,9 +1987,16 @@ else $as_nop #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. */ + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif -#include #undef $2 /* Override any GCC internal prototype to avoid an error. @@ -1915,25 +2014,24 @@ choke me #endif int -main (void) +main () { return $2 (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" -else $as_nop +else eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func @@ -1945,17 +2043,16 @@ printf "%s\n" "$ac_res" >&6; } ac_fn_c_check_member () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 -printf %s "checking for $2.$3... " >&6; } -if eval test \${$4+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 +$as_echo_n "checking for $2.$3... " >&6; } +if eval \${$4+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int -main (void) +main () { static $2 ac_aggr; if (ac_aggr.$3) @@ -1964,15 +2061,14 @@ return 0; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : eval "$4=yes" -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int -main (void) +main () { static $2 ac_aggr; if (sizeof ac_aggr.$3) @@ -1981,93 +2077,29 @@ return 0; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : eval "$4=yes" -else $as_nop +else eval "$4=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$4 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_member - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that -# executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; } -then : - ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: program exited with status $ac_status" >&5 - printf "%s\n" "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run -ac_configure_args_raw= -for ac_arg -do - case $ac_arg in - *\'*) - ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append ac_configure_args_raw " '$ac_arg'" -done - -case $ac_configure_args_raw in - *$as_nl*) - ac_safe_unquote= ;; - *) - ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. - ac_unsafe_a="$ac_unsafe_z#~" - ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" - ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; -esac - cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was -generated by GNU Autoconf 2.71. Invocation command line was +generated by GNU Autoconf 2.69. Invocation command line was - $ $0$ac_configure_args_raw + $ $0 $@ _ACEOF exec 5>>config.log @@ -2100,12 +2132,8 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - printf "%s\n" "PATH: $as_dir" + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" done IFS=$as_save_IFS @@ -2138,7 +2166,7 @@ do | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) - ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; @@ -2173,13 +2201,11 @@ done # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? - # Sanitize IFS. - IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo - printf "%s\n" "## ---------------- ## + $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo @@ -2190,8 +2216,8 @@ trap 'exit_status=$? case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -2215,7 +2241,7 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ) echo - printf "%s\n" "## ----------------- ## + $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo @@ -2223,14 +2249,14 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - printf "%s\n" "$ac_var='\''$ac_val'\''" + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then - printf "%s\n" "## ------------------- ## + $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo @@ -2238,15 +2264,15 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - printf "%s\n" "$ac_var='\''$ac_val'\''" + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then - printf "%s\n" "## ----------- ## + $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo @@ -2254,8 +2280,8 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} echo fi test "$ac_signal" != 0 && - printf "%s\n" "$as_me: caught signal $ac_signal" - printf "%s\n" "$as_me: exit $exit_status" + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && @@ -2269,47 +2295,62 @@ ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h -printf "%s\n" "/* confdefs.h */" > confdefs.h +$as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. -printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF -printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF -printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF -printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF -printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF -printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE if test -n "$CONFIG_SITE"; then - ac_site_files="$CONFIG_SITE" + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac elif test "x$prefix" != xNONE; then - ac_site_files="$prefix/share/config.site $prefix/etc/config.site" + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site else - ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site fi - -for ac_site_file in $ac_site_files +for ac_site_file in "$ac_site_file1" "$ac_site_file2" do - case $ac_site_file in #( - */*) : - ;; #( - *) : - ac_site_file=./$ac_site_file ;; -esac - if test -f "$ac_site_file" && test -r "$ac_site_file"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ - || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi @@ -2319,433 +2360,20 @@ if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -printf "%s\n" "$as_me: loading cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -printf "%s\n" "$as_me: creating cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi -# Test code for whether the C compiler supports C89 (global declarations) -ac_c_conftest_c89_globals=' -/* Does the compiler advertise C89 conformance? - Do not test the value of __STDC__, because some compilers set it to 0 - while being otherwise adequately conformant. */ -#if !defined __STDC__ -# error "Compiler does not advertise C89 conformance" -#endif - -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ -struct buf { int x; }; -struct buf * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not \xHH hex character constants. - These do not provoke an error unfortunately, instead are silently treated - as an "x". The following induces an error, until -std is added to get - proper ANSI mode. Curiously \x00 != x always comes out true, for an - array size at least. It is necessary to write \x00 == 0 to get something - that is true only with -std. */ -int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) '\''x'\'' -int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), - int, int);' - -# Test code for whether the C compiler supports C89 (body of main). -ac_c_conftest_c89_main=' -ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); -' - -# Test code for whether the C compiler supports C99 (global declarations) -ac_c_conftest_c99_globals=' -// Does the compiler advertise C99 conformance? -#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L -# error "Compiler does not advertise C99 conformance" -#endif - -#include -extern int puts (const char *); -extern int printf (const char *, ...); -extern int dprintf (int, const char *, ...); -extern void *malloc (size_t); - -// Check varargs macros. These examples are taken from C99 6.10.3.5. -// dprintf is used instead of fprintf to avoid needing to declare -// FILE and stderr. -#define debug(...) dprintf (2, __VA_ARGS__) -#define showlist(...) puts (#__VA_ARGS__) -#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) -static void -test_varargs_macros (void) -{ - int x = 1234; - int y = 5678; - debug ("Flag"); - debug ("X = %d\n", x); - showlist (The first, second, and third items.); - report (x>y, "x is %d but y is %d", x, y); -} - -// Check long long types. -#define BIG64 18446744073709551615ull -#define BIG32 4294967295ul -#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) -#if !BIG_OK - #error "your preprocessor is broken" -#endif -#if BIG_OK -#else - #error "your preprocessor is broken" -#endif -static long long int bignum = -9223372036854775807LL; -static unsigned long long int ubignum = BIG64; - -struct incomplete_array -{ - int datasize; - double data[]; -}; - -struct named_init { - int number; - const wchar_t *name; - double average; -}; - -typedef const char *ccp; - -static inline int -test_restrict (ccp restrict text) -{ - // See if C++-style comments work. - // Iterate through items via the restricted pointer. - // Also check for declarations in for loops. - for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) - continue; - return 0; -} - -// Check varargs and va_copy. -static bool -test_varargs (const char *format, ...) -{ - va_list args; - va_start (args, format); - va_list args_copy; - va_copy (args_copy, args); - - const char *str = ""; - int number = 0; - float fnumber = 0; - - while (*format) - { - switch (*format++) - { - case '\''s'\'': // string - str = va_arg (args_copy, const char *); - break; - case '\''d'\'': // int - number = va_arg (args_copy, int); - break; - case '\''f'\'': // float - fnumber = va_arg (args_copy, double); - break; - default: - break; - } - } - va_end (args_copy); - va_end (args); - - return *str && number && fnumber; -} -' - -# Test code for whether the C compiler supports C99 (body of main). -ac_c_conftest_c99_main=' - // Check bool. - _Bool success = false; - success |= (argc != 0); - - // Check restrict. - if (test_restrict ("String literal") == 0) - success = true; - char *restrict newvar = "Another string"; - - // Check varargs. - success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); - test_varargs_macros (); - - // Check flexible array members. - struct incomplete_array *ia = - malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); - ia->datasize = 10; - for (int i = 0; i < ia->datasize; ++i) - ia->data[i] = i * 1.234; - - // Check named initializers. - struct named_init ni = { - .number = 34, - .name = L"Test wide string", - .average = 543.34343, - }; - - ni.number = 58; - - int dynamic_array[ni.number]; - dynamic_array[0] = argv[0][0]; - dynamic_array[ni.number - 1] = 543; - - // work around unused variable warnings - ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' - || dynamic_array[ni.number - 1] != 543); -' - -# Test code for whether the C compiler supports C11 (global declarations) -ac_c_conftest_c11_globals=' -// Does the compiler advertise C11 conformance? -#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L -# error "Compiler does not advertise C11 conformance" -#endif - -// Check _Alignas. -char _Alignas (double) aligned_as_double; -char _Alignas (0) no_special_alignment; -extern char aligned_as_int; -char _Alignas (0) _Alignas (int) aligned_as_int; - -// Check _Alignof. -enum -{ - int_alignment = _Alignof (int), - int_array_alignment = _Alignof (int[100]), - char_alignment = _Alignof (char) -}; -_Static_assert (0 < -_Alignof (int), "_Alignof is signed"); - -// Check _Noreturn. -int _Noreturn does_not_return (void) { for (;;) continue; } - -// Check _Static_assert. -struct test_static_assert -{ - int x; - _Static_assert (sizeof (int) <= sizeof (long int), - "_Static_assert does not work in struct"); - long int y; -}; - -// Check UTF-8 literals. -#define u8 syntax error! -char const utf8_literal[] = u8"happens to be ASCII" "another string"; - -// Check duplicate typedefs. -typedef long *long_ptr; -typedef long int *long_ptr; -typedef long_ptr long_ptr; - -// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. -struct anonymous -{ - union { - struct { int i; int j; }; - struct { int k; long int l; } w; - }; - int m; -} v1; -' - -# Test code for whether the C compiler supports C11 (body of main). -ac_c_conftest_c11_main=' - _Static_assert ((offsetof (struct anonymous, i) - == offsetof (struct anonymous, w.k)), - "Anonymous union alignment botch"); - v1.i = 2; - v1.w.k = 5; - ok |= v1.i != 5; -' - -# Test code for whether the C compiler supports C11 (complete). -ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} -${ac_c_conftest_c99_globals} -${ac_c_conftest_c11_globals} - -int -main (int argc, char **argv) -{ - int ok = 0; - ${ac_c_conftest_c89_main} - ${ac_c_conftest_c99_main} - ${ac_c_conftest_c11_main} - return ok; -} -" - -# Test code for whether the C compiler supports C99 (complete). -ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} -${ac_c_conftest_c99_globals} - -int -main (int argc, char **argv) -{ - int ok = 0; - ${ac_c_conftest_c89_main} - ${ac_c_conftest_c99_main} - return ok; -} -" - -# Test code for whether the C compiler supports C89 (complete). -ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} - -int -main (int argc, char **argv) -{ - int ok = 0; - ${ac_c_conftest_c89_main} - return ok; -} -" - -as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" -as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" -as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" -as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" -as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" -as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" -as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" -as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" -as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" - -# Auxiliary files required by this configure script. -ac_aux_files="install-sh config.guess config.sub" - -# Locations in which to look for auxiliary files. -ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." - -# Search for a directory containing all of the required auxiliary files, -# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. -# If we don't find one directory that contains all the files we need, -# we report the set of missing files from the *first* directory in -# $ac_aux_dir_candidates and give up. -ac_missing_aux_files="" -ac_first_candidate=: -printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in $ac_aux_dir_candidates -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - as_found=: - - printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 - ac_aux_dir_found=yes - ac_install_sh= - for ac_aux in $ac_aux_files - do - # As a special case, if "install-sh" is required, that requirement - # can be satisfied by any of "install-sh", "install.sh", or "shtool", - # and $ac_install_sh is set appropriately for whichever one is found. - if test x"$ac_aux" = x"install-sh" - then - if test -f "${as_dir}install-sh"; then - printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 - ac_install_sh="${as_dir}install-sh -c" - elif test -f "${as_dir}install.sh"; then - printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 - ac_install_sh="${as_dir}install.sh -c" - elif test -f "${as_dir}shtool"; then - printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 - ac_install_sh="${as_dir}shtool install -c" - else - ac_aux_dir_found=no - if $ac_first_candidate; then - ac_missing_aux_files="${ac_missing_aux_files} install-sh" - else - break - fi - fi - else - if test -f "${as_dir}${ac_aux}"; then - printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 - else - ac_aux_dir_found=no - if $ac_first_candidate; then - ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" - else - break - fi - fi - fi - done - if test "$ac_aux_dir_found" = yes; then - ac_aux_dir="$as_dir" - break - fi - ac_first_candidate=false - - as_found=false -done -IFS=$as_save_IFS -if $as_found -then : - -else $as_nop - as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -if test -f "${ac_aux_dir}config.guess"; then - ac_config_guess="$SHELL ${ac_aux_dir}config.guess" -fi -if test -f "${ac_aux_dir}config.sub"; then - ac_config_sub="$SHELL ${ac_aux_dir}config.sub" -fi -if test -f "$ac_aux_dir/configure"; then - ac_configure="$SHELL ${ac_aux_dir}configure" -fi - +gt_needs="$gt_needs " # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false @@ -2756,12 +2384,12 @@ for ac_var in $ac_precious_vars; do eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) @@ -2770,24 +2398,24 @@ printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in - *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in @@ -2797,12 +2425,11 @@ printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi done if $ac_cache_corrupted; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' - and start over" "$LINENO" 5 + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## @@ -2861,9 +2488,6 @@ echo "command line was: $0 $@" # Locking. # -#AH_TEMPLATE([PASSWD_HELPER_PROGRAM], -# [Define this to use a third-party password helper program.]) - # After checking to see that --srcdir is correct (which AC_INIT does) # check for some random other files that come later in the tar file, # to make sure everything is here. @@ -2991,28 +2615,54 @@ test "x$prefix" = xNONE && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # random compiler setup +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi - # Make sure we can run config.sub. -$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -printf %s "checking build system type... " >&6; } -if test ${ac_cv_build+y} -then : - printf %s "(cached) " >&6 -else $as_nop +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_build_alias=$build_alias test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -printf "%s\n" "$ac_cv_build" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; @@ -3030,22 +2680,21 @@ build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -printf %s "checking host system type... " >&6; } -if test ${ac_cv_host+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else - ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || - as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -printf "%s\n" "$ac_cv_host" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; @@ -3064,7 +2713,6 @@ IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac ac_original_cc=$CC - ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -3073,12 +2721,11 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -3086,15 +2733,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3105,11 +2748,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi fi @@ -3117,12 +2760,11 @@ if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else @@ -3130,15 +2772,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3149,11 +2787,11 @@ fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then @@ -3161,8 +2799,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -3175,12 +2813,11 @@ if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -3188,15 +2825,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3207,11 +2840,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi fi @@ -3219,12 +2852,11 @@ fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -3233,19 +2865,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3261,18 +2889,18 @@ if test $ac_prog_rejected = yes; then # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift - ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi fi @@ -3282,12 +2910,11 @@ if test -z "$CC"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -3295,15 +2922,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3314,11 +2937,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi test -n "$CC" && break @@ -3330,12 +2953,11 @@ if test -z "$CC"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else @@ -3343,15 +2965,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -3362,11 +2980,11 @@ fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break @@ -3377,136 +2995,33 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. -set dummy ${ac_tool_prefix}clang; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}clang" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "clang", so it can be a program name with args. -set dummy clang; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="clang" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi -else - CC="$ac_cv_prog_CC" fi fi -test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. -printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 -for ac_option in --version -v -V -qversion -version; do +for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -3516,7 +3031,7 @@ printf "%s\n" "$ac_try_echo"; } >&5 cat conftest.er1 >&5 fi rm -rf conftest.er1 conftest.err - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done @@ -3524,7 +3039,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; @@ -3536,9 +3051,9 @@ ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -printf %s "checking whether the C compiler works... " >&6; } -ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" @@ -3559,12 +3074,11 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -then : + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, @@ -3581,7 +3095,7 @@ do # certainly right. break;; *.* ) - if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi @@ -3597,46 +3111,44 @@ do done test "$ac_cv_exeext" = no && ac_cv_exeext= -else $as_nop +else ac_file='' fi -if test -z "$ac_file" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -printf "%s\n" "$as_me: failed program was:" >&5 +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -printf %s "checking for C compiler default output file name... " >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -printf "%s\n" "$ac_file" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -printf %s "checking for suffix of executables... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -then : + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with @@ -3650,15 +3162,15 @@ for ac_file in conftest.exe conftest conftest.*; do * ) break;; esac done -else $as_nop - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -rf conftest conftest$ac_cv_exeext -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -printf "%s\n" "$ac_cv_exeext" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } rm -rf conftest.$ac_ext EXEEXT=$ac_cv_exeext @@ -3667,7 +3179,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; @@ -3679,8 +3191,8 @@ _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -printf %s "checking whether we are cross compiling... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in @@ -3688,10 +3200,10 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in @@ -3699,40 +3211,39 @@ printf "%s\n" "$ac_try_echo"; } >&5 *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot run C compiled programs. + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -printf "%s\n" "$cross_compiling" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } rm -rf conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -printf %s "checking for suffix of object files... " >&6; } -if test ${ac_cv_objext+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; @@ -3746,12 +3257,11 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -printf "%s\n" "$ac_try_echo"; } >&5 +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -then : + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in @@ -3760,32 +3270,31 @@ then : break;; esac done -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 +else + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -rf conftest.$ac_cv_objext conftest.$ac_ext fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -printf "%s\n" "$ac_cv_objext" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 -printf %s "checking whether the compiler supports GNU C... " >&6; } -if test ${ac_cv_c_compiler_gnu+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { #ifndef __GNUC__ choke me @@ -3795,33 +3304,29 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes -else $as_nop +else ac_compiler_gnu=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } -ac_compiler_gnu=$ac_cv_c_compiler_gnu - +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi -ac_test_CFLAGS=${CFLAGS+y} +ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -printf %s "checking whether $CC accepts -g... " >&6; } -if test ${ac_cv_prog_cc_g+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no @@ -3830,60 +3335,57 @@ else $as_nop /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes -else $as_nop +else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : -else $as_nop +else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -printf "%s\n" "$ac_cv_prog_cc_g" >&6; } -if test $ac_test_CFLAGS; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then @@ -3898,144 +3400,94 @@ else CFLAGS= fi fi -ac_prog_cc_stdc=no -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 -printf %s "checking for $CC option to enable C11 features... " >&6; } -if test ${ac_cv_prog_cc_c11+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c11=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_c_conftest_c11_program -_ACEOF -for ac_arg in '' -std=gnu11 -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_c11=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cc_c11" != "xno" && break -done -rm -rf conftest.$ac_ext -CC=$ac_save_CC -fi +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} -if test "x$ac_cv_prog_cc_c11" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c11" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 -printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } - CC="$CC $ac_cv_prog_cc_c11" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 - ac_prog_cc_stdc=c11 -fi -fi -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 -printf %s "checking for $CC option to enable C99 features... " >&6; } -if test ${ac_cv_prog_cc_c99+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c99=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_c_conftest_c99_program -_ACEOF -for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_c99=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cc_c99" != "xno" && break -done -rm -rf conftest.$ac_ext -CC=$ac_save_CC -fi +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; -if test "x$ac_cv_prog_cc_c99" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c99" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 -printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } - CC="$CC $ac_cv_prog_cc_c99" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 - ac_prog_cc_stdc=c99 -fi -fi -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 -printf %s "checking for $CC option to enable C89 features... " >&6; } -if test ${ac_cv_prog_cc_c89+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_c_conftest_c89_program +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} _ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO" -then : + if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi -rm -f core conftest.err conftest.$ac_objext conftest.beam +rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -rf conftest.$ac_ext CC=$ac_save_CC -fi -if test "x$ac_cv_prog_cc_c89" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c89" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } - CC="$CC $ac_cv_prog_cc_c89" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 - ac_prog_cc_stdc=c89 fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + fi ac_ext=c @@ -4046,35 +3498,35 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -z "$GCC"; then # not using GCC - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to request ANSI compilation" >&5 -printf %s "checking how to request ANSI compilation... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to request ANSI compilation" >&5 +$as_echo_n "checking how to request ANSI compilation... " >&6; } case "$host" in *-hpux* ) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: HPUX: adding -Ae" >&5 -printf "%s\n" "HPUX: adding -Ae" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: HPUX: adding -Ae" >&5 +$as_echo "HPUX: adding -Ae" >&6; } CC="$CC -Ae" ;; *-aix* ) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: AIX: adding -qlanglvl=ansi -qhalt=e" >&5 -printf "%s\n" "AIX: adding -qlanglvl=ansi -qhalt=e" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: AIX: adding -qlanglvl=ansi -qhalt=e" >&5 +$as_echo "AIX: adding -qlanglvl=ansi -qhalt=e" >&6; } CC="$CC -qlanglvl=ansi -qhalt=e" ;; *-dec-* ) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: DEC: adding -std1 -ieee" >&5 -printf "%s\n" "DEC: adding -std1 -ieee" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: DEC: adding -std1 -ieee" >&5 +$as_echo "DEC: adding -std1 -ieee" >&6; } CC="$CC -std1" ;; *) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no idea" >&5 -printf "%s\n" "no idea" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no idea" >&5 +$as_echo "no idea" >&6; } ;; esac else # using GCC case "$host" in *-solaris*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Solaris: adding -D__EXTENSIONS__" >&5 -printf "%s\n" "Solaris: adding -D__EXTENSIONS__" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Solaris: adding -D__EXTENSIONS__" >&5 +$as_echo "Solaris: adding -D__EXTENSIONS__" >&6; } CC="$CC -D__EXTENSIONS__" ;; esac @@ -4093,12 +3545,11 @@ printf "%s\n" "Solaris: adding -D__EXTENSIONS__" >&6; } # "-pedantic" are heeded. # if test -n "$GCC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -std=gnu89" >&5 -printf %s "checking whether gcc accepts -std=gnu89... " >&6; } -if test ${ac_cv_gcc_accepts_gnu89+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -std=gnu89" >&5 +$as_echo_n "checking whether gcc accepts -std=gnu89... " >&6; } +if ${ac_cv_gcc_accepts_gnu89+:} false; then : + $as_echo_n "(cached) " >&6 +else rm -rf conftest.$ac_ext touch conftest.$ac_ext if ( ( gcc -c -std=gnu89 conftest.$ac_ext -o/dev/null >/dev/null ) 2>&1 | \ @@ -4109,18 +3560,17 @@ else $as_nop CC="$CC -std=gnu89" fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc_accepts_gnu89" >&5 -printf "%s\n" "$ac_cv_gcc_accepts_gnu89" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc_accepts_gnu89" >&5 +$as_echo "$ac_cv_gcc_accepts_gnu89" >&6; } ac_gcc_accepts_gnu89="$ac_cv_gcc_accepts_gnu89" fi if test -n "$GCC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -pedantic" >&5 -printf %s "checking whether gcc accepts -pedantic... " >&6; } -if test ${ac_cv_gcc_accepts_pedantic+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -pedantic" >&5 +$as_echo_n "checking whether gcc accepts -pedantic... " >&6; } +if ${ac_cv_gcc_accepts_pedantic+:} false; then : + $as_echo_n "(cached) " >&6 +else rm -rf conftest.$ac_ext touch conftest.$ac_ext if ( ( gcc -c -pedantic conftest.$ac_ext -o/dev/null >/dev/null ) 2>&1 | \ @@ -4131,18 +3581,17 @@ else $as_nop CC="$CC -pedantic" fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc_accepts_pedantic" >&5 -printf "%s\n" "$ac_cv_gcc_accepts_pedantic" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc_accepts_pedantic" >&5 +$as_echo "$ac_cv_gcc_accepts_pedantic" >&6; } ac_gcc_accepts_pedantic="$ac_cv_gcc_accepts_pedantic" fi if test -n "$GCC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wall" >&5 -printf %s "checking whether gcc accepts -Wall... " >&6; } -if test ${ac_cv_gcc_accepts_Wall+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wall" >&5 +$as_echo_n "checking whether gcc accepts -Wall... " >&6; } +if ${ac_cv_gcc_accepts_Wall+:} false; then : + $as_echo_n "(cached) " >&6 +else rm -rf conftest.$ac_ext touch conftest.$ac_ext if ( ( gcc -c -Wall conftest.$ac_ext -o/dev/null >/dev/null ) 2>&1 | \ @@ -4153,18 +3602,17 @@ else $as_nop CC="$CC -Wall" fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc_accepts_Wall" >&5 -printf "%s\n" "$ac_cv_gcc_accepts_Wall" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc_accepts_Wall" >&5 +$as_echo "$ac_cv_gcc_accepts_Wall" >&6; } ac_gcc_accepts_Wall="$ac_cv_gcc_accepts_Wall" fi if test -n "$GCC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wnested-externs" >&5 -printf %s "checking whether gcc accepts -Wnested-externs... " >&6; } -if test ${ac_cv_gcc_accepts_wnested_externs+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wnested-externs" >&5 +$as_echo_n "checking whether gcc accepts -Wnested-externs... " >&6; } +if ${ac_cv_gcc_accepts_wnested_externs+:} false; then : + $as_echo_n "(cached) " >&6 +else rm -rf conftest.$ac_ext touch conftest.$ac_ext if ( ( gcc -c -Wnested-externs conftest.$ac_ext -o/dev/null >/dev/null ) 2>&1 | \ @@ -4175,18 +3623,17 @@ else $as_nop CC="$CC -Wnested-externs" fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc_accepts_wnested_externs" >&5 -printf "%s\n" "$ac_cv_gcc_accepts_wnested_externs" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc_accepts_wnested_externs" >&5 +$as_echo "$ac_cv_gcc_accepts_wnested_externs" >&6; } ac_gcc_accepts_wnested_externs="$ac_cv_gcc_accepts_wnested_externs" fi if test -n "$GCC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wstrict-prototypes" >&5 -printf %s "checking whether gcc accepts -Wstrict-prototypes... " >&6; } -if test ${ac_cv_gcc_accepts_wstrict_prototypes+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wstrict-prototypes" >&5 +$as_echo_n "checking whether gcc accepts -Wstrict-prototypes... " >&6; } +if ${ac_cv_gcc_accepts_wstrict_prototypes+:} false; then : + $as_echo_n "(cached) " >&6 +else rm -rf conftest.$ac_ext touch conftest.$ac_ext if ( ( gcc -c -Wstrict-prototypes conftest.$ac_ext -o/dev/null >/dev/null ) 2>&1 | \ @@ -4197,18 +3644,17 @@ else $as_nop CC="$CC -Wstrict-prototypes" fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc_accepts_wstrict_prototypes" >&5 -printf "%s\n" "$ac_cv_gcc_accepts_wstrict_prototypes" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc_accepts_wstrict_prototypes" >&5 +$as_echo "$ac_cv_gcc_accepts_wstrict_prototypes" >&6; } ac_gcc_accepts_wstrict_prototypes="$ac_cv_gcc_accepts_wstrict_prototypes" fi if test -n "$GCC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wmissing-prototypes" >&5 -printf %s "checking whether gcc accepts -Wmissing-prototypes... " >&6; } -if test ${ac_cv_gcc_accepts_wmissing_prototypes+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wmissing-prototypes" >&5 +$as_echo_n "checking whether gcc accepts -Wmissing-prototypes... " >&6; } +if ${ac_cv_gcc_accepts_wmissing_prototypes+:} false; then : + $as_echo_n "(cached) " >&6 +else rm -rf conftest.$ac_ext touch conftest.$ac_ext if ( ( gcc -c -Wmissing-prototypes conftest.$ac_ext -o/dev/null >/dev/null ) 2>&1 | \ @@ -4219,18 +3665,17 @@ else $as_nop CC="$CC -Wmissing-prototypes" fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc_accepts_wmissing_prototypes" >&5 -printf "%s\n" "$ac_cv_gcc_accepts_wmissing_prototypes" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc_accepts_wmissing_prototypes" >&5 +$as_echo "$ac_cv_gcc_accepts_wmissing_prototypes" >&6; } ac_gcc_accepts_wmissing_prototypes="$ac_cv_gcc_accepts_wmissing_prototypes" fi if test -n "$GCC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wdeclaration-after-statement" >&5 -printf %s "checking whether gcc accepts -Wdeclaration-after-statement... " >&6; } -if test ${ac_cv_gcc_accepts_declaration_after+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wdeclaration-after-statement" >&5 +$as_echo_n "checking whether gcc accepts -Wdeclaration-after-statement... " >&6; } +if ${ac_cv_gcc_accepts_declaration_after+:} false; then : + $as_echo_n "(cached) " >&6 +else rm -rf conftest.$ac_ext touch conftest.$ac_ext if ( ( gcc -c -Wdeclaration-after-statement conftest.$ac_ext -o/dev/null >/dev/null ) 2>&1 | \ @@ -4241,19 +3686,18 @@ else $as_nop CC="$CC -Wdeclaration-after-statement" fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc_accepts_declaration_after" >&5 -printf "%s\n" "$ac_cv_gcc_accepts_declaration_after" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc_accepts_declaration_after" >&5 +$as_echo "$ac_cv_gcc_accepts_declaration_after" >&6; } ac_gcc_accepts_declaration_after="$ac_cv_gcc_accepts_declaration_after" fi # "string length is greater than ISO C89 compilers required to support" if test -n "$GCC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wno-overlength-strings" >&5 -printf %s "checking whether gcc accepts -Wno-overlength-strings... " >&6; } -if test ${ac_cv_gcc_accepts_no_overlength_strings+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wno-overlength-strings" >&5 +$as_echo_n "checking whether gcc accepts -Wno-overlength-strings... " >&6; } +if ${ac_cv_gcc_accepts_no_overlength_strings+:} false; then : + $as_echo_n "(cached) " >&6 +else rm -rf conftest.$ac_ext touch conftest.$ac_ext if ( ( gcc -c -Wno-overlength-strings conftest.$ac_ext -o/dev/null >/dev/null ) 2>&1 | \ @@ -4264,19 +3708,18 @@ else $as_nop CC="$CC -Wno-overlength-strings" fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc_accepts_no_overlength_strings" >&5 -printf "%s\n" "$ac_cv_gcc_accepts_no_overlength_strings" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc_accepts_no_overlength_strings" >&5 +$as_echo "$ac_cv_gcc_accepts_no_overlength_strings" >&6; } ac_gcc_accepts_no_overlength_strings="$ac_cv_gcc_accepts_no_overlength_strings" fi # Ignore warnings about using "inline" if test -n "$GCC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wno-language-extension-token" >&5 -printf %s "checking whether gcc accepts -Wno-language-extension-token... " >&6; } -if test ${ac_cv_gcc_accepts_no_language_ext_token+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wno-language-extension-token" >&5 +$as_echo_n "checking whether gcc accepts -Wno-language-extension-token... " >&6; } +if ${ac_cv_gcc_accepts_no_language_ext_token+:} false; then : + $as_echo_n "(cached) " >&6 +else rm -rf conftest.$ac_ext touch conftest.$ac_ext if ( ( gcc -c -Wno-language-extension-token conftest.$ac_ext -o/dev/null >/dev/null ) 2>&1 | \ @@ -4287,19 +3730,18 @@ else $as_nop CC="$CC -Wno-language-extension-token" fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc_accepts_no_language_ext_token" >&5 -printf "%s\n" "$ac_cv_gcc_accepts_no_language_ext_token" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc_accepts_no_language_ext_token" >&5 +$as_echo "$ac_cv_gcc_accepts_no_language_ext_token" >&6; } ac_gcc_accepts_no_language_ext_token="$ac_cv_gcc_accepts_no_language_ext_token" fi # Xlib headers use named variadic macros. if test -n "$GCC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wno-variadic-macros" >&5 -printf %s "checking whether gcc accepts -Wno-variadic-macros... " >&6; } -if test ${ac_cv_gcc_accepts_no_variadic_macros+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gcc accepts -Wno-variadic-macros" >&5 +$as_echo_n "checking whether gcc accepts -Wno-variadic-macros... " >&6; } +if ${ac_cv_gcc_accepts_no_variadic_macros+:} false; then : + $as_echo_n "(cached) " >&6 +else rm -rf conftest.$ac_ext touch conftest.$ac_ext if ( ( gcc -c -Wno-variadic-macros conftest.$ac_ext -o/dev/null >/dev/null ) 2>&1 | \ @@ -4310,8 +3752,8 @@ else $as_nop CC="$CC -Wno-variadic-macros" fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc_accepts_no_variadic_macros" >&5 -printf "%s\n" "$ac_cv_gcc_accepts_no_variadic_macros" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc_accepts_no_variadic_macros" >&5 +$as_echo "$ac_cv_gcc_accepts_no_variadic_macros" >&6; } ac_gcc_accepts_no_variadic_macros="$ac_cv_gcc_accepts_no_variadic_macros" fi @@ -4322,36 +3764,40 @@ ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -printf %s "checking how to run the C preprocessor... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then - if test ${ac_cv_prog_CPP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - # Double quotes because $CC needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#ifdef __STDC__ +# include +#else +# include +#endif Syntax error _ACEOF -if ac_fn_c_try_cpp "$LINENO" -then : +if ac_fn_c_try_cpp "$LINENO"; then : -else $as_nop +else # Broken: fails on valid input. continue fi @@ -4363,11 +3809,10 @@ rm -rf conftest.err conftest.i conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF -if ac_fn_c_try_cpp "$LINENO" -then : +if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue -else $as_nop +else # Passes both tests. ac_preproc_ok=: break @@ -4377,8 +3822,7 @@ rm -rf conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -rf conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok -then : +if $ac_preproc_ok; then : break fi @@ -4390,24 +3834,29 @@ fi else ac_cv_prog_CPP=$CPP fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -printf "%s\n" "$CPP" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#ifdef __STDC__ +# include +#else +# include +#endif Syntax error _ACEOF -if ac_fn_c_try_cpp "$LINENO" -then : +if ac_fn_c_try_cpp "$LINENO"; then : -else $as_nop +else # Broken: fails on valid input. continue fi @@ -4419,11 +3868,10 @@ rm -rf conftest.err conftest.i conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF -if ac_fn_c_try_cpp "$LINENO" -then : +if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue -else $as_nop +else # Passes both tests. ac_preproc_ok=: break @@ -4433,12 +3881,11 @@ rm -rf conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -rf conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok -then : +if $ac_preproc_ok; then : -else $as_nop - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi @@ -4449,17 +3896,16 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 -printf %s "checking for an ANSI C-conforming const... " >&6; } -if test ${ac_cv_c_const+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 +$as_echo_n "checking for an ANSI C-conforming const... " >&6; } +if ${ac_cv_c_const+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { #ifndef __cplusplus @@ -4472,7 +3918,7 @@ main (void) /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; - /* IBM XL C 1.02.0.0 rejects this. + /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ @@ -4500,7 +3946,7 @@ main (void) iptr p = 0; ++p; } - { /* IBM XL C 1.02.0.0 rejects this sort of thing, saying + { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; @@ -4516,50 +3962,47 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes -else $as_nop +else ac_cv_c_const=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 -printf "%s\n" "$ac_cv_c_const" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 +$as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then -printf "%s\n" "#define const /**/" >>confdefs.h +$as_echo "#define const /**/" >>confdefs.h fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 -printf %s "checking for inline... " >&6; } -if test ${ac_cv_c_inline+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if ${ac_cv_c_inline+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; -static $ac_kw foo_t static_foo (void) {return 0; } -$ac_kw foo_t foo (void) {return 0; } +static $ac_kw foo_t static_foo () {return 0; } +$ac_kw foo_t foo () {return 0; } #endif _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 -printf "%s\n" "$ac_cv_c_inline" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +$as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; @@ -4577,8 +4020,7 @@ _ACEOF esac # stuff for Makefiles - - # Find a good install program. We prefer a C program (faster), +# Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install @@ -4592,25 +4034,20 @@ esac # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -printf %s "checking for a BSD-compatible install... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then -if test ${ac_cv_path_install+y} -then : - printf %s "(cached) " >&6 -else $as_nop +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - # Account for fact that we put trailing slashes in our PATH walk. -case $as_dir in #(( - ./ | /[cC]/* | \ + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; @@ -4620,13 +4057,13 @@ case $as_dir in #(( # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && - grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && - grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else @@ -4634,12 +4071,12 @@ case $as_dir in #(( echo one > conftest.one echo two > conftest.two mkdir conftest.dir - if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then - ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi @@ -4655,7 +4092,7 @@ IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi - if test ${ac_cv_path_install+y}; then + if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a @@ -4665,8 +4102,8 @@ fi INSTALL=$ac_install_sh fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -printf "%s\n" "$INSTALL" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. @@ -4676,12 +4113,11 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether \"\${INSTALL} -d\" creates intermediate directories" >&5 -printf %s "checking whether \"\${INSTALL} -d\" creates intermediate directories... " >&6; } -if test ${ac_cv_install_d_creates_dirs+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \"\${INSTALL} -d\" creates intermediate directories" >&5 +$as_echo_n "checking whether \"\${INSTALL} -d\" creates intermediate directories... " >&6; } +if ${ac_cv_install_d_creates_dirs+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_cv_install_d_creates_dirs=no rm -rf conftestdir if mkdir conftestdir; then @@ -4695,16 +4131,15 @@ else $as_nop fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_install_d_creates_dirs" >&5 -printf "%s\n" "$ac_cv_install_d_creates_dirs" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_install_d_creates_dirs" >&5 +$as_echo "$ac_cv_install_d_creates_dirs" >&6; } if test "$ac_cv_install_d_creates_dirs" = no ; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether \"mkdir -p\" creates intermediate directories" >&5 -printf %s "checking whether \"mkdir -p\" creates intermediate directories... " >&6; } -if test ${ac_cv_mkdir_p_creates_dirs+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \"mkdir -p\" creates intermediate directories" >&5 +$as_echo_n "checking whether \"mkdir -p\" creates intermediate directories... " >&6; } +if ${ac_cv_mkdir_p_creates_dirs+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_cv_mkdir_p_creates_dirs=no rm -rf conftestdir if mkdir conftestdir; then @@ -4718,8 +4153,8 @@ else $as_nop fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_mkdir_p_creates_dirs" >&5 -printf "%s\n" "$ac_cv_mkdir_p_creates_dirs" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_mkdir_p_creates_dirs" >&5 +$as_echo "$ac_cv_mkdir_p_creates_dirs" >&6; } fi if test "$ac_cv_install_d_creates_dirs" = yes ; then @@ -4731,14 +4166,13 @@ printf "%s\n" "$ac_cv_mkdir_p_creates_dirs" >&6; } INSTALL_DIRS='${INSTALL} -d' fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} -ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval test \${ac_cv_prog_make_${ac_make}_set+y} -then : - printf %s "(cached) " >&6 -else $as_nop +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @@ -4754,12 +4188,12 @@ esac rm -rf conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } SET_MAKE= else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi @@ -4771,103 +4205,318 @@ fi INSTALL_SCRIPT='${INSTALL}' # random libc stuff -ac_header= ac_cache= -for ac_item in $ac_header_c_list + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do - if test $ac_cache; then - ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" - if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then - printf "%s\n" "#define $ac_item 1" >> confdefs.h + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count fi - ac_header= ac_cache= - elif test $ac_header; then - ac_cache=$ac_item - else - ac_header=$ac_item + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -rf conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi -done +else + ac_cv_path_GREP=$GREP +fi -if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes -then : +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" -printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -rf conftest.in conftest.tmp conftest.nl conftest.out;; +esac + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP fi -ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" -if test "x$ac_cv_header_unistd_h" = xyes -then : - printf "%s\n" "#define HAVE_UNISTD_H 1" >>confdefs.h + fi fi -ac_fn_c_check_header_compile "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default" -if test "x$ac_cv_header_inttypes_h" = xyes -then : - printf "%s\n" "#define HAVE_INTTYPES_H 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" -fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include -ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" -if test "x$ac_cv_type_mode_t" = xyes -then : +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else $as_nop +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include -printf "%s\n" "#define mode_t int" >>confdefs.h +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : +else + ac_cv_header_stdc=no fi +rm -rf conftest* - ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default -" -if test "x$ac_cv_type_pid_t" = xyes -then : +fi -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -rf conftest* + +fi - #if defined _WIN64 && !defined __CYGWIN__ - LLP64 - #endif +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int -main (void) +main () { - - ; + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; return 0; } +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +for ac_header in unistd.h inttypes.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" +if test "x$ac_cv_type_mode_t" = xyes; then : + +else +cat >>confdefs.h <<_ACEOF +#define mode_t int _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_pid_type='int' -else $as_nop - ac_pid_type='__int64' + fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h +ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" +if test "x$ac_cv_type_pid_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define pid_t int +_ACEOF fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = xyes -then : +if test "x$ac_cv_type_size_t" = xyes; then : -else $as_nop +else -printf "%s\n" "#define size_t unsigned int" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF fi -printf "%s\n" "#define RETSIGTYPE void" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define RETSIGTYPE void +_ACEOF -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 -printf %s "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } -if test ${ac_cv_header_sys_wait_h+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 +$as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } +if ${ac_cv_header_sys_wait_h+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -4880,7 +4529,7 @@ else $as_nop #endif int -main (void) +main () { int s; wait (&s); @@ -4889,38 +4538,36 @@ main (void) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_sys_wait_h=yes -else $as_nop +else ac_cv_header_sys_wait_h=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 -printf "%s\n" "$ac_cv_header_sys_wait_h" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 +$as_echo "$ac_cv_header_sys_wait_h" >&6; } if test $ac_cv_header_sys_wait_h = yes; then -printf "%s\n" "#define HAVE_SYS_WAIT_H 1" >>confdefs.h +$as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h fi ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do - as_ac_Header=`printf "%s\n" "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 -printf %s "checking for $ac_hdr that defines DIR... " >&6; } -if eval test \${$as_ac_Header+y} -then : - printf %s "(cached) " >&6 -else $as_nop + as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 +$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } +if eval \${$as_ac_Header+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> int -main (void) +main () { if ((DIR *) 0) return 0; @@ -4928,21 +4575,19 @@ return 0; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : eval "$as_ac_Header=yes" -else $as_nop +else eval "$as_ac_Header=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_ac_Header - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Header"\" = x"yes" -then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF -#define `printf "%s\n" "HAVE_$ac_hdr" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break @@ -4951,12 +4596,11 @@ fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 -printf %s "checking for library containing opendir... " >&6; } -if test ${ac_cv_search_opendir+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +$as_echo_n "checking for library containing opendir... " >&6; } +if ${ac_cv_search_opendir+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4964,59 +4608,56 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char opendir (); int -main (void) +main () { return opendir (); ; return 0; } _ACEOF -for ac_lib in '' dir -do +for ac_lib in '' dir; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO" -then : + if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext - if test ${ac_cv_search_opendir+y} -then : + if ${ac_cv_search_opendir+:} false; then : break fi done -if test ${ac_cv_search_opendir+y} -then : +if ${ac_cv_search_opendir+:} false; then : -else $as_nop +else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 -printf "%s\n" "$ac_cv_search_opendir" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +$as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir -if test "$ac_res" != no -then : +if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 -printf %s "checking for library containing opendir... " >&6; } -if test ${ac_cv_search_opendir+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +$as_echo_n "checking for library containing opendir... " >&6; } +if ${ac_cv_search_opendir+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -5024,66 +4665,63 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char opendir (); int -main (void) +main () { return opendir (); ; return 0; } _ACEOF -for ac_lib in '' x -do +for ac_lib in '' x; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO" -then : + if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext - if test ${ac_cv_search_opendir+y} -then : + if ${ac_cv_search_opendir+:} false; then : break fi done -if test ${ac_cv_search_opendir+y} -then : +if ${ac_cv_search_opendir+:} false; then : -else $as_nop +else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 -printf "%s\n" "$ac_cv_search_opendir" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +$as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir -if test "$ac_res" != no -then : +if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to call gettimeofday" >&5 -printf %s "checking how to call gettimeofday... " >&6; } - if test ${ac_cv_gettimeofday_args+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to call gettimeofday" >&5 +$as_echo_n "checking how to call gettimeofday... " >&6; } + if ${ac_cv_gettimeofday_args+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int -main (void) +main () { struct timeval tv; struct timezone tzp; gettimeofday(&tv, &tzp); @@ -5091,48 +4729,45 @@ struct timeval tv; struct timezone tzp; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_gettimeofday_args=2 -else $as_nop +else ac_gettimeofday_args=1 fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_gettimeofday_args=$ac_gettimeofday_args fi ac_gettimeofday_args=$ac_cv_gettimeofday_args if test "$ac_gettimeofday_args" = 1 ; then - printf "%s\n" "#define HAVE_GETTIMEOFDAY 1" >>confdefs.h + $as_echo "#define HAVE_GETTIMEOFDAY 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: one argument" >&5 -printf "%s\n" "one argument" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: one argument" >&5 +$as_echo "one argument" >&6; } elif test "$ac_gettimeofday_args" = 2 ; then - printf "%s\n" "#define HAVE_GETTIMEOFDAY 1" >>confdefs.h + $as_echo "#define HAVE_GETTIMEOFDAY 1" >>confdefs.h - printf "%s\n" "#define GETTIMEOFDAY_TWO_ARGS 1" >>confdefs.h + $as_echo "#define GETTIMEOFDAY_TWO_ARGS 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: two arguments" >&5 -printf "%s\n" "two arguments" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: two arguments" >&5 +$as_echo "two arguments" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unknown" >&5 -printf "%s\n" "unknown" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5 +$as_echo "unknown" >&6; } fi # Check whether --enable-largefile was given. -if test ${enable_largefile+y} -then : +if test "${enable_largefile+set}" = set; then : enableval=$enable_largefile; fi if test "$enable_largefile" != no; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 -printf %s "checking for special C compiler options needed for large files... " >&6; } -if test ${ac_cv_sys_largefile_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 +$as_echo_n "checking for special C compiler options needed for large files... " >&6; } +if ${ac_cv_sys_largefile_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC @@ -5146,47 +4781,44 @@ else $as_nop We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int -main (void) +main () { ; return 0; } _ACEOF - if ac_fn_c_try_compile "$LINENO" -then : + if ac_fn_c_try_compile "$LINENO"; then : break fi -rm -f core conftest.err conftest.$ac_objext conftest.beam +rm -f core conftest.err conftest.$ac_objext CC="$CC -n32" - if ac_fn_c_try_compile "$LINENO" -then : + if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_largefile_CC=' -n32'; break fi -rm -f core conftest.err conftest.$ac_objext conftest.beam +rm -f core conftest.err conftest.$ac_objext break done CC=$ac_save_CC rm -rf conftest.$ac_ext fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 -printf "%s\n" "$ac_cv_sys_largefile_CC" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 +$as_echo "$ac_cv_sys_largefile_CC" >&6; } if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 -printf %s "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } -if test ${ac_cv_sys_file_offset_bits+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 +$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } +if ${ac_cv_sys_file_offset_bits+:} false; then : + $as_echo_n "(cached) " >&6 +else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -5195,23 +4827,22 @@ else $as_nop We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=no; break fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 @@ -5220,43 +4851,43 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=64; break fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_file_offset_bits=unknown break done fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 -printf "%s\n" "$ac_cv_sys_file_offset_bits" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 +$as_echo "$ac_cv_sys_file_offset_bits" >&6; } case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) -printf "%s\n" "#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits +_ACEOF ;; esac rm -rf conftest* if test $ac_cv_sys_file_offset_bits = unknown; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 -printf %s "checking for _LARGE_FILES value needed for large files... " >&6; } -if test ${ac_cv_sys_large_files+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 +$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } +if ${ac_cv_sys_large_files+:} false; then : + $as_echo_n "(cached) " >&6 +else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -5265,23 +4896,22 @@ else $as_nop We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=no; break fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGE_FILES 1 @@ -5290,154 +4920,103 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=1; break fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_large_files=unknown break done fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 -printf "%s\n" "$ac_cv_sys_large_files" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 +$as_echo "$ac_cv_sys_large_files" >&6; } case $ac_cv_sys_large_files in #( no | unknown) ;; *) -printf "%s\n" "#define _LARGE_FILES $ac_cv_sys_large_files" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define _LARGE_FILES $ac_cv_sys_large_files +_ACEOF ;; esac rm -rf conftest* fi -fi - -ac_fn_c_check_func "$LINENO" "select" "ac_cv_func_select" -if test "x$ac_cv_func_select" = xyes -then : - printf "%s\n" "#define HAVE_SELECT 1" >>confdefs.h fi -ac_fn_c_check_func "$LINENO" "fcntl" "ac_cv_func_fcntl" -if test "x$ac_cv_func_fcntl" = xyes -then : - printf "%s\n" "#define HAVE_FCNTL 1" >>confdefs.h -fi -ac_fn_c_check_func "$LINENO" "uname" "ac_cv_func_uname" -if test "x$ac_cv_func_uname" = xyes -then : - printf "%s\n" "#define HAVE_UNAME 1" >>confdefs.h +for ac_func in select fcntl uname nice setpriority getcwd getwd putenv sbrk +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF fi -ac_fn_c_check_func "$LINENO" "nice" "ac_cv_func_nice" -if test "x$ac_cv_func_nice" = xyes -then : - printf "%s\n" "#define HAVE_NICE 1" >>confdefs.h +done -fi -ac_fn_c_check_func "$LINENO" "setpriority" "ac_cv_func_setpriority" -if test "x$ac_cv_func_setpriority" = xyes -then : - printf "%s\n" "#define HAVE_SETPRIORITY 1" >>confdefs.h +for ac_func in sigaction syslog realpath setrlimit +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF fi -ac_fn_c_check_func "$LINENO" "getcwd" "ac_cv_func_getcwd" -if test "x$ac_cv_func_getcwd" = xyes -then : - printf "%s\n" "#define HAVE_GETCWD 1" >>confdefs.h +done -fi -ac_fn_c_check_func "$LINENO" "getwd" "ac_cv_func_getwd" -if test "x$ac_cv_func_getwd" = xyes -then : - printf "%s\n" "#define HAVE_GETWD 1" >>confdefs.h +for ac_func in setlocale sqrtf +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF fi -ac_fn_c_check_func "$LINENO" "putenv" "ac_cv_func_putenv" -if test "x$ac_cv_func_putenv" = xyes -then : - printf "%s\n" "#define HAVE_PUTENV 1" >>confdefs.h +done -fi -ac_fn_c_check_func "$LINENO" "sbrk" "ac_cv_func_sbrk" -if test "x$ac_cv_func_sbrk" = xyes -then : - printf "%s\n" "#define HAVE_SBRK 1" >>confdefs.h +for ac_func in getaddrinfo +do : + ac_fn_c_check_func "$LINENO" "getaddrinfo" "ac_cv_func_getaddrinfo" +if test "x$ac_cv_func_getaddrinfo" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_GETADDRINFO 1 +_ACEOF fi +done -ac_fn_c_check_func "$LINENO" "sigaction" "ac_cv_func_sigaction" -if test "x$ac_cv_func_sigaction" = xyes -then : - printf "%s\n" "#define HAVE_SIGACTION 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "syslog" "ac_cv_func_syslog" -if test "x$ac_cv_func_syslog" = xyes -then : - printf "%s\n" "#define HAVE_SYSLOG 1" >>confdefs.h +ac_fn_c_check_member "$LINENO" "struct sockaddr" "sa_len" "ac_cv_member_struct_sockaddr_sa_len" "#include +" +if test "x$ac_cv_member_struct_sockaddr_sa_len" = xyes; then : -fi -ac_fn_c_check_func "$LINENO" "realpath" "ac_cv_func_realpath" -if test "x$ac_cv_func_realpath" = xyes -then : - printf "%s\n" "#define HAVE_REALPATH 1" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_SOCKADDR_SA_LEN 1 +_ACEOF fi -ac_fn_c_check_func "$LINENO" "setrlimit" "ac_cv_func_setrlimit" -if test "x$ac_cv_func_setrlimit" = xyes -then : - printf "%s\n" "#define HAVE_SETRLIMIT 1" >>confdefs.h -fi - -ac_fn_c_check_func "$LINENO" "setlocale" "ac_cv_func_setlocale" -if test "x$ac_cv_func_setlocale" = xyes -then : - printf "%s\n" "#define HAVE_SETLOCALE 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "sqrtf" "ac_cv_func_sqrtf" -if test "x$ac_cv_func_sqrtf" = xyes -then : - printf "%s\n" "#define HAVE_SQRTF 1" >>confdefs.h - -fi - -ac_fn_c_check_func "$LINENO" "getaddrinfo" "ac_cv_func_getaddrinfo" -if test "x$ac_cv_func_getaddrinfo" = xyes -then : - printf "%s\n" "#define HAVE_GETADDRINFO 1" >>confdefs.h - -fi - -ac_fn_c_check_member "$LINENO" "struct sockaddr" "sa_len" "ac_cv_member_struct_sockaddr_sa_len" "#include -" -if test "x$ac_cv_member_struct_sockaddr_sa_len" = xyes -then : - -printf "%s\n" "#define HAVE_STRUCT_SOCKADDR_SA_LEN 1" >>confdefs.h - -fi - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct icmp" >&5 -printf %s "checking for struct icmp... " >&6; } -if test ${ac_cv_have_icmp+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct icmp" >&5 +$as_echo_n "checking for struct icmp... " >&6; } +if ${ac_cv_have_icmp+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -5460,7 +5039,7 @@ else $as_nop #include #include int -main (void) +main () { struct icmp i; struct sockaddr s; @@ -5482,26 +5061,24 @@ struct icmp i; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_have_icmp=yes -else $as_nop +else ac_cv_have_icmp=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_icmp" >&5 -printf "%s\n" "$ac_cv_have_icmp" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_icmp" >&5 +$as_echo "$ac_cv_have_icmp" >&6; } if test "$ac_cv_have_icmp" = yes ; then - printf "%s\n" "#define HAVE_ICMP 1" >>confdefs.h + $as_echo "#define HAVE_ICMP 1" >>confdefs.h fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct icmphdr" >&5 -printf %s "checking for struct icmphdr... " >&6; } -if test ${ac_cv_have_icmphdr+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct icmphdr" >&5 +$as_echo_n "checking for struct icmphdr... " >&6; } +if ${ac_cv_have_icmphdr+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -5524,7 +5101,7 @@ else $as_nop #include #include int -main (void) +main () { struct icmphdr i; struct sockaddr s; @@ -5541,26 +5118,24 @@ struct icmphdr i; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_have_icmphdr=yes -else $as_nop +else ac_cv_have_icmphdr=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_icmphdr" >&5 -printf "%s\n" "$ac_cv_have_icmphdr" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_icmphdr" >&5 +$as_echo "$ac_cv_have_icmphdr" >&6; } if test "$ac_cv_have_icmphdr" = yes ; then - printf "%s\n" "#define HAVE_ICMPHDR 1" >>confdefs.h + $as_echo "#define HAVE_ICMPHDR 1" >>confdefs.h fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getifaddrs" >&5 -printf %s "checking for getifaddrs... " >&6; } -if test ${ac_cv_have_getifaddrs+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for getifaddrs" >&5 +$as_echo_n "checking for getifaddrs... " >&6; } +if ${ac_cv_have_getifaddrs+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -5568,7 +5143,7 @@ else $as_nop #include #include int -main (void) +main () { struct ifaddrs *ifa; getifaddrs (&ifa); @@ -5578,77 +5153,73 @@ struct ifaddrs *ifa; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_have_getifaddrs=yes -else $as_nop +else ac_cv_have_getifaddrs=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_getifaddrs" >&5 -printf "%s\n" "$ac_cv_have_getifaddrs" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_getifaddrs" >&5 +$as_echo "$ac_cv_have_getifaddrs" >&6; } if test "$ac_cv_have_getifaddrs" = yes ; then - printf "%s\n" "#define HAVE_GETIFADDRS 1" >>confdefs.h + $as_echo "#define HAVE_GETIFADDRS 1" >>confdefs.h fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for socklen_t" >&5 -printf %s "checking for socklen_t... " >&6; } -if test ${ac_cv_type_socklen_t+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for socklen_t" >&5 +$as_echo_n "checking for socklen_t... " >&6; } +if ${ac_cv_type_socklen_t+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int -main (void) +main () { socklen_t socklen; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_type_socklen_t=yes -else $as_nop +else ac_cv_type_socklen_t=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_socklen_t" >&5 -printf "%s\n" "$ac_cv_type_socklen_t" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_socklen_t" >&5 +$as_echo "$ac_cv_type_socklen_t" >&6; } if test "$ac_cv_type_socklen_t" != yes; then -printf "%s\n" "#define socklen_t int" >>confdefs.h +$as_echo "#define socklen_t int" >>confdefs.h fi -ac_fn_c_check_header_compile "$LINENO" "crypt.h" "ac_cv_header_crypt_h" "$ac_includes_default" -if test "x$ac_cv_header_crypt_h" = xyes -then : - printf "%s\n" "#define HAVE_CRYPT_H 1" >>confdefs.h +for ac_header in crypt.h sys/select.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF fi -ac_fn_c_check_header_compile "$LINENO" "sys/select.h" "ac_cv_header_sys_select_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_select_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_SELECT_H 1" >>confdefs.h -fi +done for ac_prog in perl5 perl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_PERL+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PERL+:} false; then : + $as_echo_n "(cached) " >&6 +else case $PERL in [\\/]* | ?:[\\/]*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. @@ -5658,15 +5229,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_PERL="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5678,11 +5245,11 @@ esac fi PERL=$ac_cv_path_PERL if test -n "$PERL"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 -printf "%s\n" "$PERL" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 +$as_echo "$PERL" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi test -n "$PERL" && break @@ -5691,16 +5258,15 @@ done if test -z "$PERL" ; then PERL_VERSION=0 else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking perl version" >&5 -printf %s "checking perl version... " >&6; } -if test ${ac_cv_perl_version+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking perl version" >&5 +$as_echo_n "checking perl version... " >&6; } +if ${ac_cv_perl_version+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_cv_perl_version=`$PERL -e "$perl_version_cmd"` fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_perl_version" >&5 -printf "%s\n" "$ac_cv_perl_version" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_perl_version" >&5 +$as_echo "$ac_cv_perl_version" >&6; } PERL_VERSION=$ac_cv_perl_version fi @@ -5709,12 +5275,11 @@ if test -z "$PERL" ; then PERL=/usr/bin/perl fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for X" >&5 -printf %s "checking for X... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 +$as_echo_n "checking for X... " >&6; } # Check whether --with-x was given. -if test ${with_x+y} -then : +if test "${with_x+set}" = set; then : withval=$with_x; fi @@ -5725,41 +5290,12 @@ if test "x$with_x" = xno; then else case $x_includes,$x_libraries in #( *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #( - *,NONE | NONE,*) if test ${ac_cv_have_x+y} -then : - printf %s "(cached) " >&6 -else $as_nop + *,NONE | NONE,*) if ${ac_cv_have_x+:} false; then : + $as_echo_n "(cached) " >&6 +else # One or both of the vars are not set, and there is no cached value. -ac_x_includes=no -ac_x_libraries=no -# Do we need to do anything special at all? -ac_save_LIBS=$LIBS -LIBS="-lX11 $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main (void) -{ -XrmInitialize () - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - # We can compile and link X programs with no special options. - ac_x_includes= - ac_x_libraries= -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -LIBS="$ac_save_LIBS" -# If that didn't work, only try xmkmf and file system searches -# for native compilation. -if test x"$ac_x_includes" = xno && test "$cross_compiling" = no -then : - rm -f -r conftest.dir +ac_x_includes=no ac_x_libraries=no +rm -f -r conftest.dir if mkdir conftest.dir; then cd conftest.dir cat >Imakefile <<'_ACEOF' @@ -5798,7 +5334,7 @@ _ACEOF rm -f -r conftest.dir fi - # Standard set of common directories for X headers. +# Standard set of common directories for X headers. # Check X11 before X11Rn because it is often a symlink to the current release. ac_x_header_dirs=' /usr/X11/include @@ -5825,8 +5361,6 @@ ac_x_header_dirs=' /usr/local/include/X11R5 /usr/local/include/X11R4 -/opt/X11/include - /usr/X386/include /usr/x386/include /usr/XFree86/include/X11 @@ -5848,11 +5382,10 @@ if test "$ac_x_includes" = no; then /* end confdefs.h. */ #include _ACEOF -if ac_fn_c_try_cpp "$LINENO" -then : +if ac_fn_c_try_cpp "$LINENO"; then : # We can compile using X headers with no special include directory. ac_x_includes= -else $as_nop +else for ac_dir in $ac_x_header_dirs; do if test -r "$ac_dir/X11/Xlib.h"; then ac_x_includes=$ac_dir @@ -5873,21 +5406,20 @@ if test "$ac_x_libraries" = no; then /* end confdefs.h. */ #include int -main (void) +main () { XrmInitialize () ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : LIBS=$ac_save_LIBS # We can link X programs with no special library path. ac_x_libraries= -else $as_nop +else LIBS=$ac_save_LIBS -for ac_dir in `printf "%s\n" "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` +for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` do # Don't even attempt the hair of trying to link an X program! for ac_extension in a so sl dylib la dll; do @@ -5898,21 +5430,19 @@ do done done fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # $ac_x_libraries = no -fi -# Record the results. case $ac_x_includes,$ac_x_libraries in #( - no,* | *,no | *\'*) : + no,* | *,no | *\'*) # Didn't find X, or a directory has "'" in its name. - ac_cv_have_x="have_x=no" ;; #( - *) : + ac_cv_have_x="have_x=no";; #( + *) # Record where we found X for the cache. ac_cv_have_x="have_x=yes\ ac_x_includes='$ac_x_includes'\ - ac_x_libraries='$ac_x_libraries'" ;; + ac_x_libraries='$ac_x_libraries'" esac fi ;; #( @@ -5922,8 +5452,8 @@ fi fi # $with_x != no if test "$have_x" != yes; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 -printf "%s\n" "$have_x" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 +$as_echo "$have_x" >&6; } no_x=yes else # If each of the values was on the command line, it overrides each guess. @@ -5933,14 +5463,14 @@ else ac_cv_have_x="have_x=yes\ ac_x_includes='$x_includes'\ ac_x_libraries='$x_libraries'" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 -printf "%s\n" "libraries $x_libraries, headers $x_includes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 +$as_echo "libraries $x_libraries, headers $x_includes" >&6; } fi if test "$no_x" = yes; then # Not all programs may use this symbol, but it does not hurt to define it. -printf "%s\n" "#define X_DISPLAY_MISSING 1" >>confdefs.h +$as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= else @@ -5953,8 +5483,8 @@ else X_LIBS="$X_LIBS -L$x_libraries" # For Solaris; some versions of Sun CC require a space after -R and # others require no space. Words are not sufficient . . . . - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5 -printf %s "checking whether -R must be followed by a space... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5 +$as_echo_n "checking whether -R must be followed by a space... " >&6; } ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" ac_xsave_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes @@ -5962,44 +5492,42 @@ printf %s "checking whether -R must be followed by a space... " >&6; } /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } +if ac_fn_c_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } X_LIBS="$X_LIBS -R$x_libraries" -else $as_nop +else LIBS="$ac_xsave_LIBS -R $x_libraries" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } +if ac_fn_c_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } X_LIBS="$X_LIBS -R $x_libraries" -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: neither works" >&5 -printf "%s\n" "neither works" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5 +$as_echo "neither works" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_c_werror_flag=$ac_xsave_c_werror_flag LIBS=$ac_xsave_LIBS @@ -6022,25 +5550,26 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char XOpenDisplay (); int -main (void) +main () { return XOpenDisplay (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : - -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5 -printf %s "checking for dnet_ntoa in -ldnet... " >&6; } -if test ${ac_cv_lib_dnet_dnet_ntoa+y} -then : - printf %s "(cached) " >&6 -else $as_nop +if ac_fn_c_try_link "$LINENO"; then : + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5 +$as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; } +if ${ac_cv_lib_dnet_dnet_ntoa+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -6049,39 +5578,39 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char dnet_ntoa (); int -main (void) +main () { return dnet_ntoa (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dnet_dnet_ntoa=yes -else $as_nop +else ac_cv_lib_dnet_dnet_ntoa=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 -printf "%s\n" "$ac_cv_lib_dnet_dnet_ntoa" >&6; } -if test "x$ac_cv_lib_dnet_dnet_ntoa" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 +$as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; } +if test "x$ac_cv_lib_dnet_dnet_ntoa" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" fi if test $ac_cv_lib_dnet_dnet_ntoa = no; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5 -printf %s "checking for dnet_ntoa in -ldnet_stub... " >&6; } -if test ${ac_cv_lib_dnet_stub_dnet_ntoa+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5 +$as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; } +if ${ac_cv_lib_dnet_stub_dnet_ntoa+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet_stub $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -6090,35 +5619,36 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char dnet_ntoa (); int -main (void) +main () { return dnet_ntoa (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dnet_stub_dnet_ntoa=yes -else $as_nop +else ac_cv_lib_dnet_stub_dnet_ntoa=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 -printf "%s\n" "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } -if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 +$as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } +if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" fi fi fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ac_xsave_LIBS" @@ -6131,18 +5661,16 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \ # The functions gethostbyname, getservbyname, and inet_addr are # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" -if test "x$ac_cv_func_gethostbyname" = xyes -then : +if test "x$ac_cv_func_gethostbyname" = xyes; then : fi if test $ac_cv_func_gethostbyname = no; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 -printf %s "checking for gethostbyname in -lnsl... " >&6; } -if test ${ac_cv_lib_nsl_gethostbyname+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 +$as_echo_n "checking for gethostbyname in -lnsl... " >&6; } +if ${ac_cv_lib_nsl_gethostbyname+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -6151,39 +5679,39 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char gethostbyname (); int -main (void) +main () { return gethostbyname (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_nsl_gethostbyname=yes -else $as_nop +else ac_cv_lib_nsl_gethostbyname=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 -printf "%s\n" "$ac_cv_lib_nsl_gethostbyname" >&6; } -if test "x$ac_cv_lib_nsl_gethostbyname" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 +$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } +if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" fi if test $ac_cv_lib_nsl_gethostbyname = no; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5 -printf %s "checking for gethostbyname in -lbsd... " >&6; } -if test ${ac_cv_lib_bsd_gethostbyname+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5 +$as_echo_n "checking for gethostbyname in -lbsd... " >&6; } +if ${ac_cv_lib_bsd_gethostbyname+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -6192,29 +5720,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char gethostbyname (); int -main (void) +main () { return gethostbyname (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_bsd_gethostbyname=yes -else $as_nop +else ac_cv_lib_bsd_gethostbyname=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5 -printf "%s\n" "$ac_cv_lib_bsd_gethostbyname" >&6; } -if test "x$ac_cv_lib_bsd_gethostbyname" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5 +$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } +if test "x$ac_cv_lib_bsd_gethostbyname" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" fi @@ -6229,18 +5758,16 @@ fi # must be given before -lnsl if both are needed. We assume that # if connect needs -lnsl, so does gethostbyname. ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" -if test "x$ac_cv_func_connect" = xyes -then : +if test "x$ac_cv_func_connect" = xyes; then : fi if test $ac_cv_func_connect = no; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5 -printf %s "checking for connect in -lsocket... " >&6; } -if test ${ac_cv_lib_socket_connect+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5 +$as_echo_n "checking for connect in -lsocket... " >&6; } +if ${ac_cv_lib_socket_connect+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $X_EXTRA_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -6249,29 +5776,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char connect (); int -main (void) +main () { return connect (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_connect=yes -else $as_nop +else ac_cv_lib_socket_connect=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5 -printf "%s\n" "$ac_cv_lib_socket_connect" >&6; } -if test "x$ac_cv_lib_socket_connect" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5 +$as_echo "$ac_cv_lib_socket_connect" >&6; } +if test "x$ac_cv_lib_socket_connect" = xyes; then : X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" fi @@ -6279,18 +5807,16 @@ fi # Guillermo Gomez says -lposix is necessary on A/UX. ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove" -if test "x$ac_cv_func_remove" = xyes -then : +if test "x$ac_cv_func_remove" = xyes; then : fi if test $ac_cv_func_remove = no; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5 -printf %s "checking for remove in -lposix... " >&6; } -if test ${ac_cv_lib_posix_remove+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5 +$as_echo_n "checking for remove in -lposix... " >&6; } +if ${ac_cv_lib_posix_remove+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lposix $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -6299,29 +5825,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char remove (); int -main (void) +main () { return remove (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_posix_remove=yes -else $as_nop +else ac_cv_lib_posix_remove=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5 -printf "%s\n" "$ac_cv_lib_posix_remove" >&6; } -if test "x$ac_cv_lib_posix_remove" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5 +$as_echo "$ac_cv_lib_posix_remove" >&6; } +if test "x$ac_cv_lib_posix_remove" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" fi @@ -6329,18 +5856,16 @@ fi # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat" -if test "x$ac_cv_func_shmat" = xyes -then : +if test "x$ac_cv_func_shmat" = xyes; then : fi if test $ac_cv_func_shmat = no; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5 -printf %s "checking for shmat in -lipc... " >&6; } -if test ${ac_cv_lib_ipc_shmat+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5 +$as_echo_n "checking for shmat in -lipc... " >&6; } +if ${ac_cv_lib_ipc_shmat+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lipc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -6349,29 +5874,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char shmat (); int -main (void) +main () { return shmat (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ipc_shmat=yes -else $as_nop +else ac_cv_lib_ipc_shmat=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5 -printf "%s\n" "$ac_cv_lib_ipc_shmat" >&6; } -if test "x$ac_cv_lib_ipc_shmat" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5 +$as_echo "$ac_cv_lib_ipc_shmat" >&6; } +if test "x$ac_cv_lib_ipc_shmat" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" fi @@ -6387,12 +5913,11 @@ fi # These have to be linked with before -lX11, unlike the other # libraries we check for below, so use a different variable. # John Interrante, Karl Berry - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5 -printf %s "checking for IceConnectionNumber in -lICE... " >&6; } -if test ${ac_cv_lib_ICE_IceConnectionNumber+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5 +$as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; } +if ${ac_cv_lib_ICE_IceConnectionNumber+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lICE $X_EXTRA_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -6401,29 +5926,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char IceConnectionNumber (); int -main (void) +main () { return IceConnectionNumber (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ICE_IceConnectionNumber=yes -else $as_nop +else ac_cv_lib_ICE_IceConnectionNumber=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 -printf "%s\n" "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } -if test "x$ac_cv_lib_ICE_IceConnectionNumber" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 +$as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } +if test "x$ac_cv_lib_ICE_IceConnectionNumber" = xyes; then : X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" fi @@ -6545,12 +6071,11 @@ case "$host" in MOTIF_LIBS="$MOTIF_LIBS -L/usr/dt/lib -R/usr/dt/lib" # Some versions of Slowlaris Motif require -lgen. But not all. Why? - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for regcmp in -lgen" >&5 -printf %s "checking for regcmp in -lgen... " >&6; } -if test ${ac_cv_lib_gen_regcmp+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for regcmp in -lgen" >&5 +$as_echo_n "checking for regcmp in -lgen... " >&6; } +if ${ac_cv_lib_gen_regcmp+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lgen $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -6559,29 +6084,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char regcmp (); int -main (void) +main () { return regcmp (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gen_regcmp=yes -else $as_nop +else ac_cv_lib_gen_regcmp=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gen_regcmp" >&5 -printf "%s\n" "$ac_cv_lib_gen_regcmp" >&6; } -if test "x$ac_cv_lib_gen_regcmp" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gen_regcmp" >&5 +$as_echo "$ac_cv_lib_gen_regcmp" >&6; } +if test "x$ac_cv_lib_gen_regcmp" = xyes; then : MOTIF_LIBS="$MOTIF_LIBS -lgen" fi @@ -6615,12 +6141,11 @@ fi fi ;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XPointer" >&5 -printf %s "checking for XPointer... " >&6; } -if test ${ac_cv_xpointer+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for XPointer" >&5 +$as_echo_n "checking for XPointer... " >&6; } +if ${ac_cv_xpointer+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then @@ -6632,34 +6157,32 @@ else $as_nop /* end confdefs.h. */ #include int -main (void) +main () { XPointer foo = (XPointer) 0; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_xpointer=yes -else $as_nop +else ac_cv_xpointer=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_xpointer" >&5 -printf "%s\n" "$ac_cv_xpointer" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_xpointer" >&5 +$as_echo "$ac_cv_xpointer" >&6; } if test "$ac_cv_xpointer" != yes; then - printf "%s\n" "#define XPointer char*" >>confdefs.h + $as_echo "#define XPointer char*" >>confdefs.h fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Xt" >&5 -printf %s "checking for Xt... " >&6; } -if test ${ac_cv_libxt+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Xt" >&5 +$as_echo_n "checking for Xt... " >&6; } +if ${ac_cv_libxt+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then @@ -6672,27 +6195,26 @@ else $as_nop #include #include int -main (void) +main () { Widget foo = (Widget) 0; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_libxt=yes -else $as_nop +else ac_cv_libxt=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libxt" >&5 -printf "%s\n" "$ac_cv_libxt" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libxt" >&5 +$as_echo "$ac_cv_libxt" >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether this is macOS" >&5 -printf %s "checking whether this is macOS... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether this is macOS" >&5 +$as_echo_n "checking whether this is macOS... " >&6; } ac_macosx=no ac_irix=no case "$host" in @@ -6703,8 +6225,8 @@ printf %s "checking whether this is macOS... " >&6; } ac_irix=yes ;; esac -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_macosx" >&5 -printf "%s\n" "$ac_macosx" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_macosx" >&5 +$as_echo "$ac_macosx" >&6; } ############################################################################### # @@ -6715,12 +6237,11 @@ printf "%s\n" "$ac_macosx" >&6; } if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_pkg_config+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_pkg_config+:} false; then : + $as_echo_n "(cached) " >&6 +else case $pkg_config in [\\/]* | ?:[\\/]*) ac_cv_path_pkg_config="$pkg_config" # Let the user override the test with a path. @@ -6730,15 +6251,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_pkg_config="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_pkg_config="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6750,11 +6267,11 @@ esac fi pkg_config=$ac_cv_path_pkg_config if test -n "$pkg_config"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $pkg_config" >&5 -printf "%s\n" "$pkg_config" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pkg_config" >&5 +$as_echo "$pkg_config" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi fi @@ -6762,12 +6279,11 @@ if test -z "$ac_cv_path_pkg_config"; then ac_pt_pkg_config=$pkg_config # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_ac_pt_pkg_config+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_pkg_config+:} false; then : + $as_echo_n "(cached) " >&6 +else case $ac_pt_pkg_config in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_pkg_config="$ac_pt_pkg_config" # Let the user override the test with a path. @@ -6777,15 +6293,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_pkg_config="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_pkg_config="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6797,11 +6309,11 @@ esac fi ac_pt_pkg_config=$ac_cv_path_ac_pt_pkg_config if test -n "$ac_pt_pkg_config"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_pkg_config" >&5 -printf "%s\n" "$ac_pt_pkg_config" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_pkg_config" >&5 +$as_echo "$ac_pt_pkg_config" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test "x$ac_pt_pkg_config" = x; then @@ -6809,8 +6321,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac pkg_config=$ac_pt_pkg_config @@ -6820,8 +6332,8 @@ else fi if test -z "$pkg_config" ; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: pkg-config not found!" >&5 -printf "%s\n" "$as_me: WARNING: pkg-config not found!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pkg-config not found!" >&5 +$as_echo "$as_me: WARNING: pkg-config not found!" >&2;} pkg_config="false" fi @@ -6832,24 +6344,24 @@ pkg_check_version() { if test "$ok" = yes ; then req="$1" min="$2" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $req" >&5 -printf %s "checking for $req... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $req" >&5 +$as_echo_n "checking for $req... " >&6; } if $pkg_config --exists "$req" ; then vers=`$pkg_config --modversion "$req"` if $pkg_config --exists "$req >= $min" ; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $vers" >&5 -printf "%s\n" "$vers" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vers" >&5 +$as_echo "$vers" >&6; } pkgs="$pkgs $req" return 1 else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $vers (wanted >= $min)" >&5 -printf "%s\n" "$vers (wanted >= $min)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vers (wanted >= $min)" >&5 +$as_echo "$vers (wanted >= $min)" >&6; } ok=no return 0 fi else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } ok=no return 0 fi @@ -6870,18 +6382,17 @@ printf "%s\n" "no" >&6; } # that uses wildcards, and write a sane set of rules to detect gettext(3) and # msgfmt(1) and just do the obviously straightforward thing? - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 -printf %s "checking whether NLS is requested... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 +$as_echo_n "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. -if test ${enable_nls+y} -then : +if test "${enable_nls+set}" = set; then : enableval=$enable_nls; USE_NLS=$enableval -else $as_nop +else USE_NLS=yes fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 -printf "%s\n" "$USE_NLS" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 +$as_echo "$USE_NLS" >&6; } case "$am__api_version" in 1.01234) @@ -6895,22 +6406,21 @@ INTLTOOL_REQUIRED_VERSION_AS_INT=`echo | awk -F. '{ print $ 1 * 1000 + $ 2 * 10 INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3` INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` if test -n ""; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for intltool >= " >&5 -printf %s "checking for intltool >= ... " >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_APPLIED_VERSION found" >&5 -printf "%s\n" "$INTLTOOL_APPLIED_VERSION found" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intltool >= " >&5 +$as_echo_n "checking for intltool >= ... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_APPLIED_VERSION found" >&5 +$as_echo "$INTLTOOL_APPLIED_VERSION found" >&6; } test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" || as_fn_error $? "Your intltool is too old. You need intltool or later." "$LINENO" 5 fi # Extract the first word of "intltool-update", so it can be a program name with args. set dummy intltool-update; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_INTLTOOL_UPDATE+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_INTLTOOL_UPDATE+:} false; then : + $as_echo_n "(cached) " >&6 +else case $INTLTOOL_UPDATE in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_UPDATE="$INTLTOOL_UPDATE" # Let the user override the test with a path. @@ -6920,15 +6430,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_INTLTOOL_UPDATE="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_INTLTOOL_UPDATE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6940,21 +6446,20 @@ esac fi INTLTOOL_UPDATE=$ac_cv_path_INTLTOOL_UPDATE if test -n "$INTLTOOL_UPDATE"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_UPDATE" >&5 -printf "%s\n" "$INTLTOOL_UPDATE" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_UPDATE" >&5 +$as_echo "$INTLTOOL_UPDATE" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi # Extract the first word of "intltool-merge", so it can be a program name with args. set dummy intltool-merge; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_INTLTOOL_MERGE+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_INTLTOOL_MERGE+:} false; then : + $as_echo_n "(cached) " >&6 +else case $INTLTOOL_MERGE in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_MERGE="$INTLTOOL_MERGE" # Let the user override the test with a path. @@ -6964,15 +6469,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_INTLTOOL_MERGE="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_INTLTOOL_MERGE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6984,21 +6485,20 @@ esac fi INTLTOOL_MERGE=$ac_cv_path_INTLTOOL_MERGE if test -n "$INTLTOOL_MERGE"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_MERGE" >&5 -printf "%s\n" "$INTLTOOL_MERGE" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_MERGE" >&5 +$as_echo "$INTLTOOL_MERGE" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi # Extract the first word of "intltool-extract", so it can be a program name with args. set dummy intltool-extract; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_INTLTOOL_EXTRACT+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_INTLTOOL_EXTRACT+:} false; then : + $as_echo_n "(cached) " >&6 +else case $INTLTOOL_EXTRACT in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_EXTRACT="$INTLTOOL_EXTRACT" # Let the user override the test with a path. @@ -7008,15 +6508,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_INTLTOOL_EXTRACT="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_INTLTOOL_EXTRACT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7028,11 +6524,11 @@ esac fi INTLTOOL_EXTRACT=$ac_cv_path_INTLTOOL_EXTRACT if test -n "$INTLTOOL_EXTRACT"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_EXTRACT" >&5 -printf "%s\n" "$INTLTOOL_EXTRACT" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_EXTRACT" >&5 +$as_echo "$INTLTOOL_EXTRACT" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then @@ -7078,12 +6574,11 @@ fi # Check the gettext tools to make sure they are GNU # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_XGETTEXT+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_XGETTEXT+:} false; then : + $as_echo_n "(cached) " >&6 +else case $XGETTEXT in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. @@ -7093,15 +6588,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_XGETTEXT="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_XGETTEXT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7113,21 +6604,20 @@ esac fi XGETTEXT=$ac_cv_path_XGETTEXT if test -n "$XGETTEXT"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 -printf "%s\n" "$XGETTEXT" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 +$as_echo "$XGETTEXT" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_MSGMERGE+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MSGMERGE+:} false; then : + $as_echo_n "(cached) " >&6 +else case $MSGMERGE in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. @@ -7137,15 +6627,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_MSGMERGE="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_MSGMERGE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7157,21 +6643,20 @@ esac fi MSGMERGE=$ac_cv_path_MSGMERGE if test -n "$MSGMERGE"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 -printf "%s\n" "$MSGMERGE" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 +$as_echo "$MSGMERGE" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_MSGFMT+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MSGFMT+:} false; then : + $as_echo_n "(cached) " >&6 +else case $MSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. @@ -7181,15 +6666,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_MSGFMT="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_MSGFMT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7201,21 +6682,20 @@ esac fi MSGFMT=$ac_cv_path_MSGFMT if test -n "$MSGFMT"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 -printf "%s\n" "$MSGFMT" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 +$as_echo "$MSGFMT" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_GMSGFMT+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_GMSGFMT+:} false; then : + $as_echo_n "(cached) " >&6 +else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. @@ -7225,15 +6705,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_GMSGFMT="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7246,11 +6722,11 @@ esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 -printf "%s\n" "$GMSGFMT" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 +$as_echo "$GMSGFMT" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then @@ -7267,775 +6743,2625 @@ fi GETTEXT_PACKAGE=xscreensaver -printf "%s\n" "#define GETTEXT_PACKAGE \"$GETTEXT_PACKAGE\"" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define GETTEXT_PACKAGE "$GETTEXT_PACKAGE" +_ACEOF ALL_LINGUAS="da de es et fi fr hu it ja ko nb nl pl pt pt_BR ru sk sv vi wa zh_CN zh_TW" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS - ac_fn_c_check_header_compile "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" -if test "x$ac_cv_header_locale_h" = xyes -then : - printf "%s\n" "#define HAVE_LOCALE_H 1" >>confdefs.h - -fi - - if test $ac_cv_header_locale_h = yes; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 -printf %s "checking for LC_MESSAGES... " >&6; } -if test ${am_cv_val_LC_MESSAGES+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main (void) -{ -return LC_MESSAGES - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - am_cv_val_LC_MESSAGES=yes -else $as_nop - am_cv_val_LC_MESSAGES=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_val_LC_MESSAGES" >&5 -printf "%s\n" "$am_cv_val_LC_MESSAGES" >&6; } - if test $am_cv_val_LC_MESSAGES = yes; then - -printf "%s\n" "#define HAVE_LC_MESSAGES 1" >>confdefs.h - fi + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" fi - USE_NLS=yes - - gt_cv_have_gettext=no - - CATOBJEXT=NONE - XGETTEXT=: - INTLLIBS= - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 -printf %s "checking for CFPreferencesCopyAppValue... " >&6; } -if test ${gt_cv_func_CFPreferencesCopyAppValue+y} -then : - printf %s "(cached) " >&6 -else $as_nop - gt_save_LIBS="$LIBS" - LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main (void) -{ -CFPreferencesCopyAppValue(NULL, NULL) - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - gt_cv_func_CFPreferencesCopyAppValue=yes -else $as_nop - gt_cv_func_CFPreferencesCopyAppValue=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - LIBS="$gt_save_LIBS" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 -printf "%s\n" "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } - if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } -printf "%s\n" "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -rf conftest.in conftest.tmp conftest.nl conftest.out;; +esac + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 -printf %s "checking for CFLocaleCopyCurrent... " >&6; } -if test ${gt_cv_func_CFLocaleCopyCurrent+y} -then : - printf %s "(cached) " >&6 -else $as_nop - gt_save_LIBS="$LIBS" - LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main (void) -{ -CFLocaleCopyCurrent(); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - gt_cv_func_CFLocaleCopyCurrent=yes -else $as_nop - gt_cv_func_CFLocaleCopyCurrent=no +else + ac_cv_path_SED=$SED fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - LIBS="$gt_save_LIBS" + fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 -printf "%s\n" "$gt_cv_func_CFLocaleCopyCurrent" >&6; } - if test $gt_cv_func_CFLocaleCopyCurrent = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -rf conftest.sed -printf "%s\n" "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h + GETTEXT_MACRO_VERSION=0.20 - fi - INTL_MACOSX_LIBS= - if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then - INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" - fi +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi - ac_fn_c_check_header_compile "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" -if test "x$ac_cv_header_libintl_h" = xyes -then : - gt_cv_func_dgettext_libintl="no" - libintl_extra_libs="" +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file - # - # First check in libc - # - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ngettext in libc" >&5 -printf %s "checking for ngettext in libc... " >&6; } -if test ${gt_cv_func_ngettext_libc+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +# Extract the first word of "msgfmt", so it can be a program name with args. +set dummy msgfmt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MSGFMT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "$MSGFMT" in + [\\/]* | ?:[\\/]*) + ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 && + (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" + ;; +esac +fi +MSGFMT="$ac_cv_path_MSGFMT" +if test "$MSGFMT" != ":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 +$as_echo "$MSGFMT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi -#include + # Extract the first word of "gmsgfmt", so it can be a program name with args. +set dummy gmsgfmt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_GMSGFMT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $GMSGFMT in + [\\/]* | ?:[\\/]*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; +esac +fi +GMSGFMT=$ac_cv_path_GMSGFMT +if test -n "$GMSGFMT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 +$as_echo "$GMSGFMT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; + *) GMSGFMT_015=$GMSGFMT ;; + esac + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "xgettext", so it can be a program name with args. +set dummy xgettext; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_XGETTEXT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "$XGETTEXT" in + [\\/]* | ?:[\\/]*) + ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 && + (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" + ;; +esac +fi +XGETTEXT="$ac_cv_path_XGETTEXT" +if test "$XGETTEXT" != ":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 +$as_echo "$XGETTEXT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + rm -f messages.po + + case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; + *) XGETTEXT_015=$XGETTEXT ;; + esac + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "msgmerge", so it can be a program name with args. +set dummy msgmerge; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MSGMERGE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "$MSGMERGE" in + [\\/]* | ?:[\\/]*) + ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then + ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" + ;; +esac +fi +MSGMERGE="$ac_cv_path_MSGMERGE" +if test "$MSGMERGE" != ":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 +$as_echo "$MSGMERGE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if LC_ALL=C $MSGMERGE --help | grep ' --for-msgfmt ' >/dev/null; then + MSGMERGE_FOR_MSGFMT_OPTION='--for-msgfmt' + else + if LC_ALL=C $MSGMERGE --help | grep ' --no-fuzzy-matching ' >/dev/null; then + MSGMERGE_FOR_MSGFMT_OPTION='--no-fuzzy-matching --no-location --quiet' + else + MSGMERGE_FOR_MSGFMT_OPTION='--no-location --quiet' + fi + fi + + test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= + + ac_config_commands="$ac_config_commands po-directories" + + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +if test -n "$LD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld" >&5 +$as_echo_n "checking for ld... " >&6; } +elif test "$GCC" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if test -n "$LD"; then + # Let the user override the test with a path. + : +else + if ${acl_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + + acl_cv_path_LD= # Final result of this test + ac_prog=ld # Program to search in $PATH + if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + acl_output=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + acl_output=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $acl_output in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + acl_output=`echo "$acl_output" | sed 's%\\\\%/%g'` + while echo "$acl_output" | grep "$re_direlt" > /dev/null 2>&1; do + acl_output=`echo $acl_output | sed "s%$re_direlt%/%"` + done + # Got the pathname. No search in PATH is needed. + acl_cv_path_LD="$acl_output" + ac_prog= + ;; + "") + # If it fails, then pretend we aren't using GCC. + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac + fi + if test -n "$ac_prog"; then + # Search for $ac_prog in $PATH. + acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$acl_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$acl_cv_path_LD" -v 2>&1 conftest.$ac_ext +/* end confdefs.h. */ +#if defined __powerpc64__ || defined _ARCH_PPC64 + int ok; + #else + error fail + #endif -int -main (void) -{ -return !ngettext ("","", 1) - ; - return 0; -} _ACEOF -if ac_fn_c_try_link "$LINENO" -then : - gt_cv_func_ngettext_libc=yes -else $as_nop - gt_cv_func_ngettext_libc=no +if ac_fn_c_try_compile "$LINENO"; then : + # The compiler produces 64-bit code. Add option '-b64' so that the + # linker groks 64-bit object files. + case "$acl_cv_path_LD " in + *" -b64 "*) ;; + *) acl_cv_path_LD="$acl_cv_path_LD -b64" ;; + esac + fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; + sparc64-*-netbsd*) + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined __sparcv9 || defined __arch64__ + int ok; + #else + error fail + #endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + # The compiler produces 32-bit code. Add option '-m elf32_sparc' + # so that the linker groks 32-bit object files. + case "$acl_cv_path_LD " in + *" -m elf32_sparc "*) ;; + *) acl_cv_path_LD="$acl_cv_path_LD -m elf32_sparc" ;; + esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_ngettext_libc" >&5 -printf "%s\n" "$gt_cv_func_ngettext_libc" >&6; } +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; + esac - if test "$gt_cv_func_ngettext_libc" = "yes" ; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dgettext in libc" >&5 -printf %s "checking for dgettext in libc... " >&6; } -if test ${gt_cv_func_dgettext_libc+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +fi + + LD="$acl_cv_path_LD" +fi +if test -n "$LD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${acl_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$acl_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$acl_cv_prog_gnu_ld + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 +$as_echo_n "checking for shared library run path origin... " >&6; } +if ${acl_cv_rpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 +$as_echo "$acl_cv_rpath" >&6; } + wl="$acl_cv_wl" + acl_libext="$acl_cv_libext" + acl_shlibext="$acl_cv_shlibext" + acl_libname_spec="$acl_cv_libname_spec" + acl_library_names_spec="$acl_cv_library_names_spec" + acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + acl_hardcode_direct="$acl_cv_hardcode_direct" + acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" + # Check whether --enable-rpath was given. +if test "${enable_rpath+set}" = set; then : + enableval=$enable_rpath; : +else + enable_rpath=yes +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking 32-bit host C ABI" >&5 +$as_echo_n "checking 32-bit host C ABI... " >&6; } +if ${gl_cv_host_cpu_c_abi_32bit+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$gl_cv_host_cpu_c_abi"; then + case "$gl_cv_host_cpu_c_abi" in + i386 | x86_64-x32 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | riscv*-ilp32* | s390 | sparc) + gl_cv_host_cpu_c_abi_32bit=yes ;; + x86_64 | alpha | arm64 | hppa64 | ia64 | mips64 | powerpc64 | powerpc64-elfv2 | riscv*-lp64* | s390x | sparc64 ) + gl_cv_host_cpu_c_abi_32bit=no ;; + *) + gl_cv_host_cpu_c_abi_32bit=unknown ;; + esac + else + case "$host_cpu" in + + # CPUs that only support a 32-bit ABI. + arc \ + | bfin \ + | cris* \ + | csky \ + | epiphany \ + | ft32 \ + | h8300 \ + | m68k \ + | microblaze | microblazeel \ + | nds32 | nds32le | nds32be \ + | nios2 | nios2eb | nios2el \ + | or1k* \ + | or32 \ + | sh | sh1234 | sh1234elb \ + | tic6x \ + | xtensa* ) + gl_cv_host_cpu_c_abi_32bit=yes + ;; + + # CPUs that only support a 64-bit ABI. + alpha | alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] \ + | mmix ) + gl_cv_host_cpu_c_abi_32bit=no + ;; + + i[34567]86 ) + gl_cv_host_cpu_c_abi_32bit=yes + ;; + + x86_64 ) + # On x86_64 systems, the C compiler may be generating code in one of + # these ABIs: + # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64. + # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64 + # with native Windows (mingw, MSVC). + # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32. + # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +#if (defined __x86_64__ || defined __amd64__ \ + || defined _M_X64 || defined _M_AMD64) \ + && !(defined __ILP32__ || defined _ILP32) + int ok; + #else + error fail + #endif -#include +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_host_cpu_c_abi_32bit=no +else + gl_cv_host_cpu_c_abi_32bit=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; + + arm* | aarch64 ) + # Assume arm with EABI. + # On arm64 systems, the C compiler may be generating code in one of + # these ABIs: + # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64. + # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32. + # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined __aarch64__ && !(defined __ILP32__ || defined _ILP32) + int ok; + #else + error fail + #endif -int -main (void) -{ -return !dgettext ("","") - ; - return 0; -} _ACEOF -if ac_fn_c_try_link "$LINENO" -then : - gt_cv_func_dgettext_libc=yes -else $as_nop - gt_cv_func_dgettext_libc=no +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_host_cpu_c_abi_32bit=no +else + gl_cv_host_cpu_c_abi_32bit=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; + + hppa1.0 | hppa1.1 | hppa2.0* | hppa64 ) + # On hppa, the C compiler may be generating 32-bit code or 64-bit + # code. In the latter case, it defines _LP64 and __LP64__. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __LP64__ + int ok; + #else + error fail + #endif +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_host_cpu_c_abi_32bit=no +else + gl_cv_host_cpu_c_abi_32bit=yes fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_dgettext_libc" >&5 -printf "%s\n" "$gt_cv_func_dgettext_libc" >&6; } - fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; - if test "$gt_cv_func_ngettext_libc" = "yes" ; then - ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" -if test "x$ac_cv_func_bind_textdomain_codeset" = xyes -then : - printf "%s\n" "#define HAVE_BIND_TEXTDOMAIN_CODESET 1" >>confdefs.h + ia64* ) + # On ia64 on HP-UX, the C compiler may be generating 64-bit code or + # 32-bit code. In the latter case, it defines _ILP32. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef _ILP32 + int ok; + #else + error fail + #endif +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_host_cpu_c_abi_32bit=yes +else + gl_cv_host_cpu_c_abi_32bit=no fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; - fi + mips* ) + # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this + # at 32. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64) + int ok; + #else + error fail + #endif - # - # If we don't have everything we want, check in libintl - # - if test "$gt_cv_func_dgettext_libc" != "yes" \ - || test "$gt_cv_func_ngettext_libc" != "yes" \ - || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for bindtextdomain in -lintl" >&5 -printf %s "checking for bindtextdomain in -lintl... " >&6; } -if test ${ac_cv_lib_intl_bindtextdomain+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-lintl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_host_cpu_c_abi_32bit=no +else + gl_cv_host_cpu_c_abi_32bit=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; + + powerpc* ) + # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD. + # No need to distinguish them here; the caller may distinguish + # them based on the OS. + # On powerpc64 systems, the C compiler may still be generating + # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may + # be generating 64-bit code. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +#if defined __powerpc64__ || defined _ARCH_PPC64 + int ok; + #else + error fail + #endif -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char bindtextdomain (); +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_host_cpu_c_abi_32bit=no +else + gl_cv_host_cpu_c_abi_32bit=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; + + rs6000 ) + gl_cv_host_cpu_c_abi_32bit=yes + ;; + + riscv32 | riscv64 ) + # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d. + # Size of 'long' and 'void *': + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined __LP64__ + int ok; + #else + error fail + #endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_host_cpu_c_abi_32bit=no +else + gl_cv_host_cpu_c_abi_32bit=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; + + s390* ) + # On s390x, the C compiler may be generating 64-bit (= s390x) code + # or 31-bit (= s390) code. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined __LP64__ || defined __s390x__ + int ok; + #else + error fail + #endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_host_cpu_c_abi_32bit=no +else + gl_cv_host_cpu_c_abi_32bit=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; + + sparc | sparc64 ) + # UltraSPARCs running Linux have `uname -m` = "sparc64", but the + # C compiler still generates 32-bit code. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined __sparcv9 || defined __arch64__ + int ok; + #else + error fail + #endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_host_cpu_c_abi_32bit=no +else + gl_cv_host_cpu_c_abi_32bit=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; + + *) + gl_cv_host_cpu_c_abi_32bit=unknown + ;; + esac + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_host_cpu_c_abi_32bit" >&5 +$as_echo "$gl_cv_host_cpu_c_abi_32bit" >&6; } + + HOST_CPU_C_ABI_32BIT="$gl_cv_host_cpu_c_abi_32bit" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ELF binary format" >&5 +$as_echo_n "checking for ELF binary format... " >&6; } +if ${gl_cv_elf+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __ELF__ + Extensible Linking Format + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Extensible Linking Format" >/dev/null 2>&1; then : + gl_cv_elf=yes +else + gl_cv_elf=no +fi +rm -rf conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_elf" >&5 +$as_echo "$gl_cv_elf" >&6; } + if test $gl_cv_elf; then + # Extract the ELF class of a file (5th byte) in decimal. + # Cf. https://en.wikipedia.org/wiki/Executable_and_Linkable_Format#File_header + if od -A x < /dev/null >/dev/null 2>/dev/null; then + # Use POSIX od. + func_elfclass () + { + od -A n -t d1 -j 4 -N 1 + } + else + # Use BSD hexdump. + func_elfclass () + { + dd bs=1 count=1 skip=4 2>/dev/null | hexdump -e '1/1 "%3d "' + echo + } + fi + case $HOST_CPU_C_ABI_32BIT in + yes) + # 32-bit ABI. + acl_is_expected_elfclass () + { + test "`func_elfclass | sed -e 's/[ ]//g'`" = 1 + } + ;; + no) + # 64-bit ABI. + acl_is_expected_elfclass () + { + test "`func_elfclass | sed -e 's/[ ]//g'`" = 2 + } + ;; + *) + # Unknown. + acl_is_expected_elfclass () + { + : + } + ;; + esac + else + acl_is_expected_elfclass () + { + : + } + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the common suffixes of directories in the library search path" >&5 +$as_echo_n "checking for the common suffixes of directories in the library search path... " >&6; } +if ${acl_cv_libdirstems+:} false; then : + $as_echo_n "(cached) " >&6 +else + acl_libdirstem=lib + acl_libdirstem2= + acl_libdirstem3= + case "$host_os" in + solaris*) + if test $HOST_CPU_C_ABI_32BIT = no; then + acl_libdirstem2=lib/64 + case "$host_cpu" in + sparc*) acl_libdirstem3=lib/sparcv9 ;; + i*86 | x86_64) acl_libdirstem3=lib/amd64 ;; + esac + fi + ;; + *) + searchpath=`(LC_ALL=C $CC $CPPFLAGS $CFLAGS -print-search-dirs) 2>/dev/null \ + | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` + if test $HOST_CPU_C_ABI_32BIT != no; then + # 32-bit or unknown ABI. + if test -d /usr/lib32; then + acl_libdirstem2=lib32 + fi + fi + if test $HOST_CPU_C_ABI_32BIT != yes; then + # 64-bit or unknown ABI. + if test -d /usr/lib64; then + acl_libdirstem3=lib64 + fi + fi + if test -n "$searchpath"; then + acl_save_IFS="${IFS= }"; IFS=":" + for searchdir in $searchpath; do + if test -d "$searchdir"; then + case "$searchdir" in + */lib32/ | */lib32 ) acl_libdirstem2=lib32 ;; + */lib64/ | */lib64 ) acl_libdirstem3=lib64 ;; + */../ | */.. ) + # Better ignore directories of this form. They are misleading. + ;; + *) searchdir=`cd "$searchdir" && pwd` + case "$searchdir" in + */lib32 ) acl_libdirstem2=lib32 ;; + */lib64 ) acl_libdirstem3=lib64 ;; + esac ;; + esac + fi + done + IFS="$acl_save_IFS" + if test $HOST_CPU_C_ABI_32BIT = yes; then + # 32-bit ABI. + acl_libdirstem3= + fi + if test $HOST_CPU_C_ABI_32BIT = no; then + # 64-bit ABI. + acl_libdirstem2= + fi + fi + ;; + esac + test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" + test -n "$acl_libdirstem3" || acl_libdirstem3="$acl_libdirstem" + acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2,$acl_libdirstem3" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_libdirstems" >&5 +$as_echo "$acl_cv_libdirstems" >&6; } + acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'` + acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,//' -e 's/,.*//'` + acl_libdirstem3=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,[^,]*,//' -e 's/,.*//'` + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" + eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + +# Check whether --with-libiconv-prefix was given. +if test "${with_libiconv_prefix+set}" = set; then : + withval=$with_libiconv_prefix; + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" + eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + additional_libdir2="$withval/$acl_libdirstem2" + additional_libdir3="$withval/$acl_libdirstem3" + fi + fi + +fi + + if test "X$additional_libdir2" = "X$additional_libdir"; then + additional_libdir2= + fi + if test "X$additional_libdir3" = "X$additional_libdir"; then + additional_libdir3= + fi + LIBICONV= + LTLIBICONV= + INCICONV= + LIBICONV_PREFIX= + HAVE_LIBICONV= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='iconv ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi + if test $use_additional = yes; then + for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do + if test "X$found_dir" = "X"; then + eval dir=\$$additional_libdir_variable + if test -n "$dir"; then + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + fi + fi + done + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$acl_hardcode_direct" = yes; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" + fi + if test "$acl_hardcode_minus_L" != no; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = 'iconv'; then + LIBICONV_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = 'iconv'; then + LIBICONV_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem3 | */$acl_libdirstem3/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` + if test "$name" = 'iconv'; then + LIBICONV_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ + && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then + haveit= + if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ + || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$dependency_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$dependency_libdir"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$dependency_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$dependency_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$dependency_libdir"; then + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$dependency_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" + ;; + esac + done + fi + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$acl_hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" + done + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 +$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } +if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then : + $as_echo_n "(cached) " >&6 +else + gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include int -main (void) +main () { -return bindtextdomain (); +CFPreferencesCopyAppValue(NULL, NULL) ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : - ac_cv_lib_intl_bindtextdomain=yes -else $as_nop - ac_cv_lib_intl_bindtextdomain=no +if ac_fn_c_try_link "$LINENO"; then : + gt_cv_func_CFPreferencesCopyAppValue=yes +else + gt_cv_func_CFPreferencesCopyAppValue=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS + LIBS="$gt_save_LIBS" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_bindtextdomain" >&5 -printf "%s\n" "$ac_cv_lib_intl_bindtextdomain" >&6; } -if test "x$ac_cv_lib_intl_bindtextdomain" = xyes -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 -printf %s "checking for ngettext in -lintl... " >&6; } -if test ${ac_cv_lib_intl_ngettext+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-lintl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 +$as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } + if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char ngettext (); +$as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyPreferredLanguages" >&5 +$as_echo_n "checking for CFLocaleCopyPreferredLanguages... " >&6; } +if ${gt_cv_func_CFLocaleCopyPreferredLanguages+:} false; then : + $as_echo_n "(cached) " >&6 +else + gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include int -main (void) +main () { -return ngettext (); +CFLocaleCopyPreferredLanguages(); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : - ac_cv_lib_intl_ngettext=yes -else $as_nop - ac_cv_lib_intl_ngettext=no +if ac_fn_c_try_link "$LINENO"; then : + gt_cv_func_CFLocaleCopyPreferredLanguages=yes +else + gt_cv_func_CFLocaleCopyPreferredLanguages=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS + LIBS="$gt_save_LIBS" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 -printf "%s\n" "$ac_cv_lib_intl_ngettext" >&6; } -if test "x$ac_cv_lib_intl_ngettext" = xyes -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dgettext in -lintl" >&5 -printf %s "checking for dgettext in -lintl... " >&6; } -if test ${ac_cv_lib_intl_dgettext+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-lintl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyPreferredLanguages" >&5 +$as_echo "$gt_cv_func_CFLocaleCopyPreferredLanguages" >&6; } + if test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then + +$as_echo "#define HAVE_CFLOCALECOPYPREFERREDLANGUAGES 1" >>confdefs.h + + fi + INTL_MACOSX_LIBS= + if test $gt_cv_func_CFPreferencesCopyAppValue = yes \ + || test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then + INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" + fi + + LIBINTL= + LTLIBINTL= + POSUB= + + case " $gt_needs " in + *" need-formatstring-macros "*) gt_api_version=3 ;; + *" need-ngettext "*) gt_api_version=2 ;; + *) gt_api_version=1 ;; + esac + gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" + gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" + + if test "$USE_NLS" = "yes"; then + gt_use_preinstalled_gnugettext=no + + if test $gt_api_version -ge 3; then + gt_revision_test_code=' +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) +#endif +typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; +' + else + gt_revision_test_code= + fi + if test $gt_api_version -ge 2; then + gt_expression_test_code=' + * ngettext ("", "", 0)' + else + gt_expression_test_code= + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 +$as_echo_n "checking for GNU gettext in libc... " >&6; } +if eval \${$gt_func_gnugettext_libc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char dgettext (); +#include +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +extern int _nl_msg_cat_cntr; +extern int *_nl_domain_bindings; +#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_domain_bindings) +#else +#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 +#endif +$gt_revision_test_code + int -main (void) +main () { -return dgettext (); + +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION + ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : - ac_cv_lib_intl_dgettext=yes -else $as_nop - ac_cv_lib_intl_dgettext=no +if ac_fn_c_try_link "$LINENO"; then : + eval "$gt_func_gnugettext_libc=yes" +else + eval "$gt_func_gnugettext_libc=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dgettext" >&5 -printf "%s\n" "$ac_cv_lib_intl_dgettext" >&6; } -if test "x$ac_cv_lib_intl_dgettext" = xyes -then : - gt_cv_func_dgettext_libintl=yes fi +eval ac_res=\$$gt_func_gnugettext_libc + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } -fi + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then + + am_save_CPPFLAGS="$CPPFLAGS" + + for element in $INCICONV; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 +$as_echo_n "checking for iconv... " >&6; } +if ${am_cv_func_iconv+:} false; then : + $as_echo_n "(cached) " >&6 +else + am_cv_func_iconv="no, consider installing GNU libiconv" + am_cv_lib_iconv=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include + +int +main () +{ +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + am_cv_func_iconv=yes fi - - if test "$gt_cv_func_dgettext_libintl" != "yes" ; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if -liconv is needed to use gettext" >&5 -printf %s "checking if -liconv is needed to use gettext... " >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: " >&5 -printf "%s\n" "" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 -printf %s "checking for ngettext in -lintl... " >&6; } -if test ${ac_cv_lib_intl_ngettext+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-lintl -liconv $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char ngettext (); +#include +#include + int -main (void) +main () { -return ngettext (); +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : - ac_cv_lib_intl_ngettext=yes -else $as_nop - ac_cv_lib_intl_ngettext=no +if ac_fn_c_try_link "$LINENO"; then : + am_cv_lib_iconv=yes + am_cv_func_iconv=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS + LIBS="$am_save_LIBS" + fi + fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 -printf "%s\n" "$ac_cv_lib_intl_ngettext" >&6; } -if test "x$ac_cv_lib_intl_ngettext" = xyes -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dcgettext in -lintl" >&5 -printf %s "checking for dcgettext in -lintl... " >&6; } -if test ${ac_cv_lib_intl_dcgettext+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-lintl -liconv $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 +$as_echo "$am_cv_func_iconv" >&6; } + if test "$am_cv_func_iconv" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 +$as_echo_n "checking for working iconv... " >&6; } +if ${am_cv_func_iconv_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + + am_save_LIBS="$LIBS" + if test $am_cv_lib_iconv = yes; then + LIBS="$LIBS $LIBICONV" + fi + am_cv_func_iconv_works=no + for ac_iconv_const in '' 'const'; do + if test "$cross_compiling" = yes; then : + case "$host_os" in + aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; + *) am_cv_func_iconv_works="guessing yes" ;; + esac +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char dcgettext (); +#include +#include + +#ifndef ICONV_CONST +# define ICONV_CONST $ac_iconv_const +#endif + int -main (void) +main () { -return dcgettext (); +int result = 0; + /* Test against AIX 5.1 bug: Failures are not distinguishable from successful + returns. */ + { + iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); + if (cd_utf8_to_88591 != (iconv_t)(-1)) + { + static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */ + char buf[10]; + ICONV_CONST char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_utf8_to_88591, + &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + result |= 1; + iconv_close (cd_utf8_to_88591); + } + } + /* Test against Solaris 10 bug: Failures are not distinguishable from + successful returns. */ + { + iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); + if (cd_ascii_to_88591 != (iconv_t)(-1)) + { + static ICONV_CONST char input[] = "\263"; + char buf[10]; + ICONV_CONST char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_ascii_to_88591, + &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + result |= 2; + iconv_close (cd_ascii_to_88591); + } + } + /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ + { + iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); + if (cd_88591_to_utf8 != (iconv_t)(-1)) + { + static ICONV_CONST char input[] = "\304"; + static char buf[2] = { (char)0xDE, (char)0xAD }; + ICONV_CONST char *inptr = input; + size_t inbytesleft = 1; + char *outptr = buf; + size_t outbytesleft = 1; + size_t res = iconv (cd_88591_to_utf8, + &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) + result |= 4; + iconv_close (cd_88591_to_utf8); + } + } +#if 0 /* This bug could be worked around by the caller. */ + /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ + { + iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); + if (cd_88591_to_utf8 != (iconv_t)(-1)) + { + static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char buf[50]; + ICONV_CONST char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_88591_to_utf8, + &inptr, &inbytesleft, + &outptr, &outbytesleft); + if ((int)res > 0) + result |= 8; + iconv_close (cd_88591_to_utf8); + } + } +#endif + /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is + provided. */ + { + /* Try standardized names. */ + iconv_t cd1 = iconv_open ("UTF-8", "EUC-JP"); + /* Try IRIX, OSF/1 names. */ + iconv_t cd2 = iconv_open ("UTF-8", "eucJP"); + /* Try AIX names. */ + iconv_t cd3 = iconv_open ("UTF-8", "IBM-eucJP"); + /* Try HP-UX names. */ + iconv_t cd4 = iconv_open ("utf8", "eucJP"); + if (cd1 == (iconv_t)(-1) && cd2 == (iconv_t)(-1) + && cd3 == (iconv_t)(-1) && cd4 == (iconv_t)(-1)) + result |= 16; + if (cd1 != (iconv_t)(-1)) + iconv_close (cd1); + if (cd2 != (iconv_t)(-1)) + iconv_close (cd2); + if (cd3 != (iconv_t)(-1)) + iconv_close (cd3); + if (cd4 != (iconv_t)(-1)) + iconv_close (cd4); + } + return result; + ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : - ac_cv_lib_intl_dcgettext=yes -else $as_nop - ac_cv_lib_intl_dcgettext=no +if ac_fn_c_try_run "$LINENO"; then : + am_cv_func_iconv_works=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dcgettext" >&5 -printf "%s\n" "$ac_cv_lib_intl_dcgettext" >&6; } -if test "x$ac_cv_lib_intl_dcgettext" = xyes -then : - gt_cv_func_dgettext_libintl=yes - libintl_extra_libs=-liconv -else $as_nop - : +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi -else $as_nop - : + test "$am_cv_func_iconv_works" = no || break + done + LIBS="$am_save_LIBS" + fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 +$as_echo "$am_cv_func_iconv_works" >&6; } + case "$am_cv_func_iconv_works" in + *no) am_func_iconv=no am_cv_lib_iconv=no ;; + *) am_func_iconv=yes ;; + esac + else + am_func_iconv=no am_cv_lib_iconv=no + fi + if test "$am_func_iconv" = yes; then - fi +$as_echo "#define HAVE_ICONV 1" >>confdefs.h - # - # If we found libintl, then check in it for bind_textdomain_codeset(); - # we'll prefer libc if neither have bind_textdomain_codeset(), - # and both have dgettext and ngettext - # - if test "$gt_cv_func_dgettext_libintl" = "yes" ; then - glib_save_LIBS="$LIBS" - LIBS="$LIBS -lintl $libintl_extra_libs" - unset ac_cv_func_bind_textdomain_codeset - ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" -if test "x$ac_cv_func_bind_textdomain_codeset" = xyes -then : - printf "%s\n" "#define HAVE_BIND_TEXTDOMAIN_CODESET 1" >>confdefs.h + fi + if test "$am_cv_lib_iconv" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 +$as_echo_n "checking how to link with libiconv... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 +$as_echo "$LIBICONV" >&6; } + else + CPPFLAGS="$am_save_CPPFLAGS" + LIBICONV= + LTLIBICONV= + fi -fi + use_additional=yes - LIBS="$glib_save_LIBS" + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" - if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then - gt_cv_func_dgettext_libc=no - else - if test "$gt_cv_func_dgettext_libc" = "yes" \ - && test "$gt_cv_func_ngettext_libc" = "yes"; then - gt_cv_func_dgettext_libintl=no - fi - fi - fi - fi + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" + eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" - if test "$gt_cv_func_dgettext_libc" = "yes" \ - || test "$gt_cv_func_dgettext_libintl" = "yes"; then - gt_cv_have_gettext=yes - fi + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" - if test "$gt_cv_func_dgettext_libintl" = "yes"; then - INTLLIBS="-lintl $libintl_extra_libs $INTL_MACOSX_LIBS" - fi +# Check whether --with-libintl-prefix was given. +if test "${with_libintl_prefix+set}" = set; then : + withval=$with_libintl_prefix; + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then - if test "$gt_cv_have_gettext" = "yes"; then + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" -printf "%s\n" "#define HAVE_GETTEXT 1" >>confdefs.h + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" + eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" - # Extract the first word of "msgfmt", so it can be a program name with args. -set dummy msgfmt; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_MSGFMT+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case "$MSGFMT" in - /*) - ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. - ;; - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then - ac_cv_path_MSGFMT="$ac_dir/$ac_word" - break + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + additional_libdir2="$withval/$acl_libdirstem2" + additional_libdir3="$withval/$acl_libdirstem3" fi fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no" - ;; -esac -fi -MSGFMT="$ac_cv_path_MSGFMT" -if test "$MSGFMT" != "no"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 -printf "%s\n" "$MSGFMT" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - if test "$MSGFMT" != "no"; then - glib_save_LIBS="$LIBS" - LIBS="$LIBS $INTLLIBS" - ac_fn_c_check_func "$LINENO" "dcgettext" "ac_cv_func_dcgettext" -if test "x$ac_cv_func_dcgettext" = xyes -then : - printf "%s\n" "#define HAVE_DCGETTEXT 1" >>confdefs.h - -fi - - MSGFMT_OPTS= - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if msgfmt accepts -c" >&5 -printf %s "checking if msgfmt accepts -c... " >&6; } - cat >conftest.foo <<_ACEOF - -msgid "" -msgstr "" -"Content-Type: text/plain; charset=UTF-8\n" -"Project-Id-Version: test 1.0\n" -"PO-Revision-Date: 2007-02-15 12:01+0100\n" -"Last-Translator: test \n" -"Language-Team: C \n" -"MIME-Version: 1.0\n" -"Content-Transfer-Encoding: 8bit\n" -_ACEOF -if { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$MSGFMT -c -o /dev/null conftest.foo"; } >&5 - ($MSGFMT -c -o /dev/null conftest.foo) 2>&5 - ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - MSGFMT_OPTS=-c; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -echo "$as_me: failed input was:" >&5 -sed 's/^/| /' conftest.foo >&5 fi - # Extract the first word of "gmsgfmt", so it can be a program name with args. -set dummy gmsgfmt; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_GMSGFMT+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $GMSGFMT in - [\\/]* | ?:[\\/]*) - ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_GMSGFMT="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 - break 2 - fi -done + if test "X$additional_libdir2" = "X$additional_libdir"; then + additional_libdir2= + fi + if test "X$additional_libdir3" = "X$additional_libdir"; then + additional_libdir3= + fi + LIBINTL= + LTLIBINTL= + INCINTL= + LIBINTL_PREFIX= + HAVE_LIBINTL= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='intl ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi + if test $use_additional = yes; then + for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do + if test "X$found_dir" = "X"; then + eval dir=\$$additional_libdir_variable + if test -n "$dir"; then + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + fi + fi + done + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$acl_hardcode_direct" = yes; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" + fi + if test "$acl_hardcode_minus_L" != no; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = 'intl'; then + LIBINTL_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = 'intl'; then + LIBINTL_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem3 | */$acl_libdirstem3/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` + if test "$name" = 'intl'; then + LIBINTL_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ + && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then + haveit= + if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ + || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$dependency_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$dependency_libdir"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$dependency_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$dependency_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$dependency_libdir"; then + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$dependency_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" + ;; + esac + done + fi + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" + fi + fi + fi + done done -IFS=$as_save_IFS + if test "X$rpathdirs" != "X"; then + if test -n "$acl_hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" + done + fi - test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" - ;; -esac -fi -GMSGFMT=$ac_cv_path_GMSGFMT -if test -n "$GMSGFMT"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 -printf "%s\n" "$GMSGFMT" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 +$as_echo_n "checking for GNU gettext in libintl... " >&6; } +if eval \${$gt_func_gnugettext_libintl+:} false; then : + $as_echo_n "(cached) " >&6 else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi + gt_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $INCINTL" + gt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBINTL" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ - # Extract the first word of "xgettext", so it can be a program name with args. -set dummy xgettext; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_XGETTEXT+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case "$XGETTEXT" in - /*) - ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. - ;; - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then - ac_cv_path_XGETTEXT="$ac_dir/$ac_word" - break - fi - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" - ;; -esac -fi -XGETTEXT="$ac_cv_path_XGETTEXT" -if test "$XGETTEXT" != ":"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 -printf "%s\n" "$XGETTEXT" >&6; } +#include +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); +#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) +#else +#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 +#endif +$gt_revision_test_code + +int +main () +{ + +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$gt_func_gnugettext_libintl=yes" else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + eval "$gt_func_gnugettext_libintl=no" fi - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then + LIBS="$LIBS $LIBICONV" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +#include +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); +#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) +#else +#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 +#endif +$gt_revision_test_code + int -main (void) +main () { -extern int _nl_msg_cat_cntr; - return _nl_msg_cat_cntr + +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION + ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : - CATOBJEXT=.gmo - DATADIRNAME=share -else $as_nop - case $host in - *-*-solaris*) - ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" -if test "x$ac_cv_func_bind_textdomain_codeset" = xyes -then : - CATOBJEXT=.gmo - DATADIRNAME=share -else $as_nop - CATOBJEXT=.mo - DATADIRNAME=lib -fi +if ac_fn_c_try_link "$LINENO"; then : + LIBINTL="$LIBINTL $LIBICONV" + LTLIBINTL="$LTLIBINTL $LTLIBICONV" + eval "$gt_func_gnugettext_libintl=yes" - ;; - *-*-openbsd*) - CATOBJEXT=.mo - DATADIRNAME=share - ;; - *) - CATOBJEXT=.mo - DATADIRNAME=lib - ;; - esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext - LIBS="$glib_save_LIBS" - INSTOBJEXT=.mo - else - gt_cv_have_gettext=no - fi - fi - + fi + CPPFLAGS="$gt_save_CPPFLAGS" + LIBS="$gt_save_LIBS" fi +eval ac_res=\$$gt_func_gnugettext_libintl + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + fi + + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ + || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ + && test "$PACKAGE" != gettext-runtime \ + && test "$PACKAGE" != gettext-tools; }; then + gt_use_preinstalled_gnugettext=yes + else + LIBINTL= + LTLIBINTL= + INCINTL= + fi + + if test -n "$INTL_MACOSX_LIBS"; then + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" + LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" + fi + fi - if test "$gt_cv_have_gettext" = "yes" ; then + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then -printf "%s\n" "#define ENABLE_NLS 1" >>confdefs.h +$as_echo "#define ENABLE_NLS 1" >>confdefs.h + else + USE_NLS=no fi + fi - if test "$XGETTEXT" != ":"; then - if $XGETTEXT --omit-header /dev/null 2> /dev/null; then - : ; + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 +$as_echo_n "checking whether to use NLS... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 +$as_echo "$USE_NLS" >&6; } + if test "$USE_NLS" = "yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 +$as_echo_n "checking where the gettext function comes from... " >&6; } + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + gt_source="external libintl" else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it" >&5 -printf "%s\n" "found xgettext program is not GNU xgettext; ignore it" >&6; } - XGETTEXT=":" + gt_source="libc" + fi + else + gt_source="included intl directory" + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 +$as_echo "$gt_source" >&6; } + fi + + if test "$USE_NLS" = "yes"; then + + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 +$as_echo_n "checking how to link with libintl... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 +$as_echo "$LIBINTL" >&6; } + + for element in $INCINTL; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi + done - # We need to process the po/ directory. - POSUB=po + fi - ac_config_commands="$ac_config_commands default-1" +$as_echo "#define HAVE_GETTEXT 1" >>confdefs.h - for lang in $ALL_LINGUAS; do - GMOFILES="$GMOFILES $lang.gmo" - POFILES="$POFILES $lang.po" - done +$as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h - if test "$gt_cv_have_gettext" = "yes"; then - if test "x$ALL_LINGUAS" = "x"; then - LINGUAS= - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5 -printf %s "checking for catalogs to be installed... " >&6; } - NEW_LINGUAS= - for presentlang in $ALL_LINGUAS; do - useit=no - if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then - desiredlanguages="$LINGUAS" - else - desiredlanguages="$ALL_LINGUAS" - fi - for desiredlang in $desiredlanguages; do - # Use the presentlang catalog if desiredlang is - # a. equal to presentlang, or - # b. a variant of presentlang (because in this case, - # presentlang can be used as a fallback for messages - # which are not translated in the desiredlang catalog). - case "$desiredlang" in - "$presentlang"*) useit=yes;; - esac - done - if test $useit = yes; then - NEW_LINGUAS="$NEW_LINGUAS $presentlang" - fi - done - LINGUAS=$NEW_LINGUAS - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5 -printf "%s\n" "$LINGUAS" >&6; } - fi + fi - if test -n "$LINGUAS"; then - for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done - fi - fi + POSUB=po + fi - MKINSTALLDIRS= - if test -n "$ac_aux_dir"; then - MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" - fi - if test -z "$MKINSTALLDIRS"; then - MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" - fi + INTLLIBS="$LIBINTL" + +MKINSTALLDIRS="$INSTALL_DIRS" + +# The library is there, but neither $INTLLIBS nor $LIBINTL are getting set. +if test -z "$INTLLIBS" ; then INTLLIBS="$LIBINTL" ; fi +if test -z "$INTLLIBS" ; then + + ac_save_CPPFLAGS="$CPPFLAGS" + ac_save_LDFLAGS="$LDFLAGS" +# ac_save_LIBS="$LIBS" + + if test \! -z "$includedir" ; then + CPPFLAGS="$CPPFLAGS -I$includedir" + fi + # note: $X_CFLAGS includes $x_includes + CPPFLAGS="$CPPFLAGS $X_CFLAGS" + + if test \! -z "$libdir" ; then + LDFLAGS="$LDFLAGS -L$libdir" + fi + # note: $X_LIBS includes $x_libraries + LDFLAGS="$LDFLAGS $X_LIBS $X_EXTRA_LIBS" + + CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` + LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gettext in -lintl" >&5 +$as_echo_n "checking for gettext in -lintl... " >&6; } +if ${ac_cv_lib_intl_gettext+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lintl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gettext (); +int +main () +{ +return gettext (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_intl_gettext=yes +else + ac_cv_lib_intl_gettext=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_gettext" >&5 +$as_echo "$ac_cv_lib_intl_gettext" >&6; } +if test "x$ac_cv_lib_intl_gettext" = xyes; then : + INTLLIBS="-lintl" +fi - test -d po || mkdir po - if test "x$srcdir" != "x."; then - if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then - posrcprefix="$srcdir/" - else - posrcprefix="../$srcdir/" - fi - else - posrcprefix="../" - fi - rm -f po/POTFILES - sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ - < $srcdir/po/POTFILES.in > po/POTFILES + CPPFLAGS="$ac_save_CPPFLAGS" + LDFLAGS="$ac_save_LDFLAGS" +# LIBS="$ac_save_LIBS" -MKINSTALLDIRS="$INSTALL_DIRS" +fi +LIBINTL="$INTLLIBS" ############################################################################### # @@ -8046,19 +9372,17 @@ MKINSTALLDIRS="$INSTALL_DIRS" #### H1 # Check whether --with-app-defaults was given. -if test ${with_app_defaults+y} -then : +if test "${with_app_defaults+set}" = set; then : withval=$with_app_defaults; ac_cv_x_app_defaults="$withval" -else $as_nop +else eval ac_x_app_defaults="$withval" fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for X app-defaults directory" >&5 -printf %s "checking for X app-defaults directory... " >&6; } -if test ${ac_cv_x_app_defaults+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X app-defaults directory" >&5 +$as_echo_n "checking for X app-defaults directory... " >&6; } +if ${ac_cv_x_app_defaults+:} false; then : + $as_echo_n "(cached) " >&6 +else # skip this, it's always wrong these days. # AC_PATH_X_APP_DEFAULTS_XMKMF if test x"$ac_x_app_defaults" = x; then @@ -8134,8 +9458,8 @@ else $as_nop ac_cv_x_app_defaults="$ac_x_app_defaults" fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_x_app_defaults" >&5 -printf "%s\n" "$ac_cv_x_app_defaults" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_x_app_defaults" >&5 +$as_echo "$ac_cv_x_app_defaults" >&6; } eval ac_x_app_defaults="$ac_cv_x_app_defaults" ############################################################################### @@ -8148,10 +9472,9 @@ have_hackdir=yes with_hackdir_req=unspecified # Check whether --with-hackdir was given. -if test ${with_hackdir+y} -then : +if test "${with_hackdir+set}" = set; then : withval=$with_hackdir; with_hackdir="$withval"; with_hackdir_req="$withval" -else $as_nop +else with_hackdir=yes fi @@ -8174,8 +9497,7 @@ HACKDIR_FULL=`eval eval eval eval eval eval eval eval eval echo $HACKDIR` obsolete_enable= # Check whether --enable-subdir was given. -if test ${enable_subdir+y} -then : +if test "${enable_subdir+set}" = set; then : enableval=$enable_subdir; obsolete_enable=yes fi @@ -8196,10 +9518,9 @@ have_configdir=yes with_configdir_req=unspecified # Check whether --with-configdir was given. -if test ${with_configdir+y} -then : +if test "${with_configdir+set}" = set; then : withval=$with_configdir; with_configdir="$withval"; with_configdir_req="$withval" -else $as_nop +else with_configdir=yes fi @@ -8229,10 +9550,9 @@ have_fontdir=yes with_fontdir_req=unspecified # Check whether --with-fontdir was given. -if test ${with_fontdir+y} -then : +if test "${with_fontdir+set}" = set; then : withval=$with_fontdir; with_fontdir="$withval"; with_fontdir_req="$withval" -else $as_nop +else with_fontdir=yes fi @@ -8266,10 +9586,9 @@ have_dpms=no with_dpms_req=unspecified # Check whether --with-dpms-ext was given. -if test ${with_dpms_ext+y} -then : +if test "${with_dpms_ext+set}" = set; then : withval=$with_dpms_ext; with_dpms="$withval"; with_dpms_req="$withval" -else $as_nop +else with_dpms=yes fi @@ -8278,28 +9597,28 @@ fi no) ;; /*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for DPMS headers" >&5 -printf %s "checking for DPMS headers... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DPMS headers" >&5 +$as_echo_n "checking for DPMS headers... " >&6; } d=$with_dpms/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for DPMS libs" >&5 -printf %s "checking for DPMS libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DPMS libs" >&5 +$as_echo_n "checking for DPMS libs... " >&6; } d=$with_dpms/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". @@ -8329,8 +9648,7 @@ if test "$with_dpms" = yes; then ac_fn_c_check_header_compile "$LINENO" "X11/extensions/dpms.h" "ac_cv_header_X11_extensions_dpms_h" "#include #include " -if test "x$ac_cv_header_X11_extensions_dpms_h" = xyes -then : +if test "x$ac_cv_header_X11_extensions_dpms_h" = xyes; then : have_dpms=yes fi @@ -8360,12 +9678,11 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for DPMSInfo in -lXext" >&5 -printf %s "checking for DPMSInfo in -lXext... " >&6; } -if test ${ac_cv_lib_Xext_DPMSInfo+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DPMSInfo in -lXext" >&5 +$as_echo_n "checking for DPMSInfo in -lXext... " >&6; } +if ${ac_cv_lib_Xext_DPMSInfo+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lXext -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -8374,31 +9691,32 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char DPMSInfo (); int -main (void) +main () { return DPMSInfo (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xext_DPMSInfo=yes -else $as_nop +else ac_cv_lib_Xext_DPMSInfo=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xext_DPMSInfo" >&5 -printf "%s\n" "$ac_cv_lib_Xext_DPMSInfo" >&6; } -if test "x$ac_cv_lib_Xext_DPMSInfo" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xext_DPMSInfo" >&5 +$as_echo "$ac_cv_lib_Xext_DPMSInfo" >&6; } +if test "x$ac_cv_lib_Xext_DPMSInfo" = xyes; then : have_dpms=yes -else $as_nop +else true fi @@ -8427,12 +9745,11 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for DPMSInfo in -lXdpms" >&5 -printf %s "checking for DPMSInfo in -lXdpms... " >&6; } -if test ${ac_cv_lib_Xdpms_DPMSInfo+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DPMSInfo in -lXdpms" >&5 +$as_echo_n "checking for DPMSInfo in -lXdpms... " >&6; } +if ${ac_cv_lib_Xdpms_DPMSInfo+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lXdpms -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -8441,31 +9758,32 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char DPMSInfo (); int -main (void) +main () { return DPMSInfo (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xdpms_DPMSInfo=yes -else $as_nop +else ac_cv_lib_Xdpms_DPMSInfo=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xdpms_DPMSInfo" >&5 -printf "%s\n" "$ac_cv_lib_Xdpms_DPMSInfo" >&6; } -if test "x$ac_cv_lib_Xdpms_DPMSInfo" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xdpms_DPMSInfo" >&5 +$as_echo "$ac_cv_lib_Xdpms_DPMSInfo" >&6; } +if test "x$ac_cv_lib_Xdpms_DPMSInfo" = xyes; then : have_dpms=yes; XDPMS_LIBS="-lXdpms" -else $as_nop +else true fi @@ -8478,7 +9796,7 @@ fi # if that succeeded, then we've really got it. if test "$have_dpms" = yes; then - printf "%s\n" "#define HAVE_DPMS_EXTENSION 1" >>confdefs.h + $as_echo "#define HAVE_DPMS_EXTENSION 1" >>confdefs.h fi @@ -8497,10 +9815,9 @@ have_xf86vmode=no with_xf86vmode_req=unspecified # Check whether --with-xf86vmode-ext was given. -if test ${with_xf86vmode_ext+y} -then : +if test "${with_xf86vmode_ext+set}" = set; then : withval=$with_xf86vmode_ext; with_xf86vmode="$withval"; with_xf86vmode_req="$withval" -else $as_nop +else with_xf86vmode=yes fi @@ -8509,28 +9826,28 @@ fi no) ;; /*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for xf86vmode headers" >&5 -printf %s "checking for xf86vmode headers... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xf86vmode headers" >&5 +$as_echo_n "checking for xf86vmode headers... " >&6; } d=$with_xf86vmode/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for xf86vmode libs" >&5 -printf %s "checking for xf86vmode libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xf86vmode libs" >&5 +$as_echo_n "checking for xf86vmode libs... " >&6; } d=$with_xf86vmode/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". @@ -8561,8 +9878,7 @@ if test "$with_xf86vmode" = yes; then CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/extensions/xf86vmode.h" "ac_cv_header_X11_extensions_xf86vmode_h" "#include " -if test "x$ac_cv_header_X11_extensions_xf86vmode_h" = xyes -then : +if test "x$ac_cv_header_X11_extensions_xf86vmode_h" = xyes; then : have_xf86vmode=yes fi @@ -8590,12 +9906,11 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XF86VidModeGetViewPort in -lXxf86vm" >&5 -printf %s "checking for XF86VidModeGetViewPort in -lXxf86vm... " >&6; } -if test ${ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XF86VidModeGetViewPort in -lXxf86vm" >&5 +$as_echo_n "checking for XF86VidModeGetViewPort in -lXxf86vm... " >&6; } +if ${ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lXxf86vm -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -8604,33 +9919,34 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char XF86VidModeGetViewPort (); int -main (void) +main () { return XF86VidModeGetViewPort (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort=yes -else $as_nop +else ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort" >&5 -printf "%s\n" "$ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort" >&6; } -if test "x$ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort" >&5 +$as_echo "$ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort" >&6; } +if test "x$ac_cv_lib_Xxf86vm_XF86VidModeGetViewPort" = xyes; then : have_xf86vmode=yes; VIDMODE_LIBS="-lXxf86vm"; SAVER_LIBS="$SAVER_LIBS $VIDMODE_LIBS" -else $as_nop +else true fi @@ -8642,7 +9958,7 @@ fi # if that succeeded, then we've really got it. if test "$have_xf86vmode" = yes; then - printf "%s\n" "#define HAVE_XF86VMODE 1" >>confdefs.h + $as_echo "#define HAVE_XF86VMODE 1" >>confdefs.h fi @@ -8661,10 +9977,9 @@ have_xinerama=no with_xinerama_req=unspecified # Check whether --with-xinerama-ext was given. -if test ${with_xinerama_ext+y} -then : +if test "${with_xinerama_ext+set}" = set; then : withval=$with_xinerama_ext; with_xinerama="$withval"; with_xinerama_req="$withval" -else $as_nop +else with_xinerama=yes fi @@ -8673,28 +9988,28 @@ fi no) ;; /*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XINERAMA headers" >&5 -printf %s "checking for XINERAMA headers... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XINERAMA headers" >&5 +$as_echo_n "checking for XINERAMA headers... " >&6; } d=$with_xinerama/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XINERAMA libs" >&5 -printf %s "checking for XINERAMA libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XINERAMA libs" >&5 +$as_echo_n "checking for XINERAMA libs... " >&6; } d=$with_xinerama/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". @@ -8723,8 +10038,7 @@ if test "$with_xinerama" = yes; then CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/extensions/Xinerama.h" "ac_cv_header_X11_extensions_Xinerama_h" "#include " -if test "x$ac_cv_header_X11_extensions_Xinerama_h" = xyes -then : +if test "x$ac_cv_header_X11_extensions_Xinerama_h" = xyes; then : have_xinerama=yes fi @@ -8754,12 +10068,11 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XineramaQueryScreens in -lXext" >&5 -printf %s "checking for XineramaQueryScreens in -lXext... " >&6; } -if test ${ac_cv_lib_Xext_XineramaQueryScreens+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XineramaQueryScreens in -lXext" >&5 +$as_echo_n "checking for XineramaQueryScreens in -lXext... " >&6; } +if ${ac_cv_lib_Xext_XineramaQueryScreens+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lXext -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -8768,31 +10081,32 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char XineramaQueryScreens (); int -main (void) +main () { return XineramaQueryScreens (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xext_XineramaQueryScreens=yes -else $as_nop +else ac_cv_lib_Xext_XineramaQueryScreens=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xext_XineramaQueryScreens" >&5 -printf "%s\n" "$ac_cv_lib_Xext_XineramaQueryScreens" >&6; } -if test "x$ac_cv_lib_Xext_XineramaQueryScreens" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xext_XineramaQueryScreens" >&5 +$as_echo "$ac_cv_lib_Xext_XineramaQueryScreens" >&6; } +if test "x$ac_cv_lib_Xext_XineramaQueryScreens" = xyes; then : have_xinerama=yes -else $as_nop +else true fi @@ -8821,12 +10135,11 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XineramaQueryScreens in -lXinerama" >&5 -printf %s "checking for XineramaQueryScreens in -lXinerama... " >&6; } -if test ${ac_cv_lib_Xinerama_XineramaQueryScreens+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XineramaQueryScreens in -lXinerama" >&5 +$as_echo_n "checking for XineramaQueryScreens in -lXinerama... " >&6; } +if ${ac_cv_lib_Xinerama_XineramaQueryScreens+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lXinerama -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -8835,31 +10148,32 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char XineramaQueryScreens (); int -main (void) +main () { return XineramaQueryScreens (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xinerama_XineramaQueryScreens=yes -else $as_nop +else ac_cv_lib_Xinerama_XineramaQueryScreens=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xinerama_XineramaQueryScreens" >&5 -printf "%s\n" "$ac_cv_lib_Xinerama_XineramaQueryScreens" >&6; } -if test "x$ac_cv_lib_Xinerama_XineramaQueryScreens" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xinerama_XineramaQueryScreens" >&5 +$as_echo "$ac_cv_lib_Xinerama_XineramaQueryScreens" >&6; } +if test "x$ac_cv_lib_Xinerama_XineramaQueryScreens" = xyes; then : have_xinerama=yes; XINERAMA_LIBS="-lXinerama" -else $as_nop +else true fi @@ -8872,7 +10186,7 @@ fi # if that succeeded, then we've really got it. if test "$have_xinerama" = yes; then - printf "%s\n" "#define HAVE_XINERAMA 1" >>confdefs.h + $as_echo "#define HAVE_XINERAMA 1" >>confdefs.h fi @@ -8895,10 +10209,9 @@ have_randr=no with_randr_req=unspecified # Check whether --with-randr-ext was given. -if test ${with_randr_ext+y} -then : +if test "${with_randr_ext+set}" = set; then : withval=$with_randr_ext; with_randr="$withval"; with_randr_req="$withval" -else $as_nop +else with_randr=yes fi @@ -8907,28 +10220,28 @@ fi no) ;; /*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for RANDR headers" >&5 -printf %s "checking for RANDR headers... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for RANDR headers" >&5 +$as_echo_n "checking for RANDR headers... " >&6; } d=$with_randr/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for RANDR libs" >&5 -printf %s "checking for RANDR libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for RANDR libs" >&5 +$as_echo_n "checking for RANDR libs... " >&6; } d=$with_randr/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". @@ -8957,8 +10270,7 @@ if test "$with_randr" = yes; then CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/extensions/Xrandr.h" "ac_cv_header_X11_extensions_Xrandr_h" "#include " -if test "x$ac_cv_header_X11_extensions_Xrandr_h" = xyes -then : +if test "x$ac_cv_header_X11_extensions_Xrandr_h" = xyes; then : have_randr=yes fi @@ -8988,12 +10300,11 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XRenderSetSubpixelOrder in -lXrender" >&5 -printf %s "checking for XRenderSetSubpixelOrder in -lXrender... " >&6; } -if test ${ac_cv_lib_Xrender_XRenderSetSubpixelOrder+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XRenderSetSubpixelOrder in -lXrender" >&5 +$as_echo_n "checking for XRenderSetSubpixelOrder in -lXrender... " >&6; } +if ${ac_cv_lib_Xrender_XRenderSetSubpixelOrder+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lXrender -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -9002,31 +10313,32 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char XRenderSetSubpixelOrder (); int -main (void) +main () { return XRenderSetSubpixelOrder (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xrender_XRenderSetSubpixelOrder=yes -else $as_nop +else ac_cv_lib_Xrender_XRenderSetSubpixelOrder=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xrender_XRenderSetSubpixelOrder" >&5 -printf "%s\n" "$ac_cv_lib_Xrender_XRenderSetSubpixelOrder" >&6; } -if test "x$ac_cv_lib_Xrender_XRenderSetSubpixelOrder" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xrender_XRenderSetSubpixelOrder" >&5 +$as_echo "$ac_cv_lib_Xrender_XRenderSetSubpixelOrder" >&6; } +if test "x$ac_cv_lib_Xrender_XRenderSetSubpixelOrder" = xyes; then : xrender_libs="-lXrender" -else $as_nop +else true fi @@ -9055,12 +10367,11 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XRRGetScreenInfo in -lXext" >&5 -printf %s "checking for XRRGetScreenInfo in -lXext... " >&6; } -if test ${ac_cv_lib_Xext_XRRGetScreenInfo+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XRRGetScreenInfo in -lXext" >&5 +$as_echo_n "checking for XRRGetScreenInfo in -lXext... " >&6; } +if ${ac_cv_lib_Xext_XRRGetScreenInfo+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lXext $xrender_libs -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -9069,31 +10380,32 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char XRRGetScreenInfo (); int -main (void) +main () { return XRRGetScreenInfo (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xext_XRRGetScreenInfo=yes -else $as_nop +else ac_cv_lib_Xext_XRRGetScreenInfo=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xext_XRRGetScreenInfo" >&5 -printf "%s\n" "$ac_cv_lib_Xext_XRRGetScreenInfo" >&6; } -if test "x$ac_cv_lib_Xext_XRRGetScreenInfo" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xext_XRRGetScreenInfo" >&5 +$as_echo "$ac_cv_lib_Xext_XRRGetScreenInfo" >&6; } +if test "x$ac_cv_lib_Xext_XRRGetScreenInfo" = xyes; then : have_randr=yes; SAVER_LIBS="$SAVER_LIBS $xrender_libs" -else $as_nop +else true fi @@ -9122,12 +10434,11 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XRRGetScreenInfo in -lXrandr" >&5 -printf %s "checking for XRRGetScreenInfo in -lXrandr... " >&6; } -if test ${ac_cv_lib_Xrandr_XRRGetScreenInfo+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XRRGetScreenInfo in -lXrandr" >&5 +$as_echo_n "checking for XRRGetScreenInfo in -lXrandr... " >&6; } +if ${ac_cv_lib_Xrandr_XRRGetScreenInfo+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lXrandr $xrender_libs -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -9136,31 +10447,32 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char XRRGetScreenInfo (); int -main (void) +main () { return XRRGetScreenInfo (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xrandr_XRRGetScreenInfo=yes -else $as_nop +else ac_cv_lib_Xrandr_XRRGetScreenInfo=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xrandr_XRRGetScreenInfo" >&5 -printf "%s\n" "$ac_cv_lib_Xrandr_XRRGetScreenInfo" >&6; } -if test "x$ac_cv_lib_Xrandr_XRRGetScreenInfo" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xrandr_XRRGetScreenInfo" >&5 +$as_echo "$ac_cv_lib_Xrandr_XRRGetScreenInfo" >&6; } +if test "x$ac_cv_lib_Xrandr_XRRGetScreenInfo" = xyes; then : have_randr=yes; SAVER_LIBS="$SAVER_LIBS -lXrandr $xrender_libs" -else $as_nop +else true fi @@ -9173,16 +10485,15 @@ fi # if that succeeded, then we've really got it. if test "$have_randr" = yes; then - printf "%s\n" "#define HAVE_RANDR 1" >>confdefs.h + $as_echo "#define HAVE_RANDR 1" >>confdefs.h # Now check for version 1.2 in the same libs. # Try to compile, since on macOS 10.5.7, headers are older than libs! - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XRRGetScreenResources" >&5 -printf %s "checking for XRRGetScreenResources... " >&6; } -if test ${ac_cv_randr_12+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XRRGetScreenResources" >&5 +$as_echo_n "checking for XRRGetScreenResources... " >&6; } +if ${ac_cv_randr_12+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_cv_randr_12=no ac_save_CPPFLAGS="$CPPFLAGS" @@ -9197,7 +10508,7 @@ else $as_nop #include #include int -main (void) +main () { XRRScreenResources *res = XRRGetScreenResources (0, 0); @@ -9205,19 +10516,18 @@ XRRScreenResources *res = return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_randr_12=yes -else $as_nop +else ac_cv_randr_12=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_randr_12" >&5 -printf "%s\n" "$ac_cv_randr_12" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_randr_12" >&5 +$as_echo "$ac_cv_randr_12" >&6; } if test "$ac_cv_randr_12" = yes ; then - printf "%s\n" "#define HAVE_RANDR_12 1" >>confdefs.h + $as_echo "#define HAVE_RANDR_12 1" >>confdefs.h fi # AC_CHECK_X_LIB(c, XRRGetOutputInfo, [AC_DEFINE(HAVE_RANDR_12)], @@ -9240,10 +10550,9 @@ with_xinput_req=unspecified xinput_halfassed=no # Check whether --with-xinput-ext was given. -if test ${with_xinput_ext+y} -then : +if test "${with_xinput_ext+set}" = set; then : withval=$with_xinput_ext; with_xinput="$withval"; with_xinput_req="$withval" -else $as_nop +else with_xinput=yes fi @@ -9252,28 +10561,28 @@ fi no) ;; /*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XINPUT headers" >&5 -printf %s "checking for XINPUT headers... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XINPUT headers" >&5 +$as_echo_n "checking for XINPUT headers... " >&6; } d=$with_xinput/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XINPUT libs" >&5 -printf %s "checking for XINPUT libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XINPUT libs" >&5 +$as_echo_n "checking for XINPUT libs... " >&6; } d=$with_xinput/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". @@ -9302,8 +10611,7 @@ if test "$with_xinput" = yes; then CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/extensions/XInput2.h" "ac_cv_header_X11_extensions_XInput2_h" "#include " -if test "x$ac_cv_header_X11_extensions_XInput2_h" = xyes -then : +if test "x$ac_cv_header_X11_extensions_XInput2_h" = xyes; then : have_xinput=yes fi @@ -9332,12 +10640,11 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XISelectEvents in -lXi" >&5 -printf %s "checking for XISelectEvents in -lXi... " >&6; } -if test ${ac_cv_lib_Xi_XISelectEvents+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XISelectEvents in -lXi" >&5 +$as_echo_n "checking for XISelectEvents in -lXi... " >&6; } +if ${ac_cv_lib_Xi_XISelectEvents+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lXi -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -9346,32 +10653,33 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char XISelectEvents (); int -main (void) +main () { return XISelectEvents (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xi_XISelectEvents=yes -else $as_nop +else ac_cv_lib_Xi_XISelectEvents=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xi_XISelectEvents" >&5 -printf "%s\n" "$ac_cv_lib_Xi_XISelectEvents" >&6; } -if test "x$ac_cv_lib_Xi_XISelectEvents" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xi_XISelectEvents" >&5 +$as_echo "$ac_cv_lib_Xi_XISelectEvents" >&6; } +if test "x$ac_cv_lib_Xi_XISelectEvents" = xyes; then : have_xinput=yes; xinput_halfassed=no; SAVER_LIBS="$SAVER_LIBS -lXi" -else $as_nop +else true fi @@ -9383,7 +10691,7 @@ fi # if that succeeded, then we've really got it. if test "$have_xinput" = yes; then - printf "%s\n" "#define HAVE_XINPUT 1" >>confdefs.h + $as_echo "#define HAVE_XINPUT 1" >>confdefs.h fi @@ -9403,10 +10711,9 @@ have_xf86gamma_ramp=no with_xf86gamma_req=unspecified # Check whether --with-xf86gamma-ext was given. -if test ${with_xf86gamma_ext+y} -then : +if test "${with_xf86gamma_ext+set}" = set; then : withval=$with_xf86gamma_ext; with_xf86gamma="$withval"; with_xf86gamma_req="$withval" -else $as_nop +else with_xf86gamma=yes fi @@ -9415,28 +10722,28 @@ fi no) ;; /*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for xf86gamma headers" >&5 -printf %s "checking for xf86gamma headers... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xf86gamma headers" >&5 +$as_echo_n "checking for xf86gamma headers... " >&6; } d=$with_xf86gamma/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for xf86gamma libs" >&5 -printf %s "checking for xf86gamma libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xf86gamma libs" >&5 +$as_echo_n "checking for xf86gamma libs... " >&6; } d=$with_xf86gamma/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". @@ -9468,8 +10775,7 @@ if test "$with_xf86gamma" = yes; then CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/extensions/xf86vmode.h" "ac_cv_header_X11_extensions_xf86vmode_h" "#include " -if test "x$ac_cv_header_X11_extensions_xf86vmode_h" = xyes -then : +if test "x$ac_cv_header_X11_extensions_xf86vmode_h" = xyes; then : have_xf86gamma=yes fi @@ -9498,12 +10804,11 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XF86VidModeSetGamma in -lXxf86vm" >&5 -printf %s "checking for XF86VidModeSetGamma in -lXxf86vm... " >&6; } -if test ${ac_cv_lib_Xxf86vm_XF86VidModeSetGamma+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XF86VidModeSetGamma in -lXxf86vm" >&5 +$as_echo_n "checking for XF86VidModeSetGamma in -lXxf86vm... " >&6; } +if ${ac_cv_lib_Xxf86vm_XF86VidModeSetGamma+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lXxf86vm -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -9512,31 +10817,32 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char XF86VidModeSetGamma (); int -main (void) +main () { return XF86VidModeSetGamma (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xxf86vm_XF86VidModeSetGamma=yes -else $as_nop +else ac_cv_lib_Xxf86vm_XF86VidModeSetGamma=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xxf86vm_XF86VidModeSetGamma" >&5 -printf "%s\n" "$ac_cv_lib_Xxf86vm_XF86VidModeSetGamma" >&6; } -if test "x$ac_cv_lib_Xxf86vm_XF86VidModeSetGamma" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xxf86vm_XF86VidModeSetGamma" >&5 +$as_echo "$ac_cv_lib_Xxf86vm_XF86VidModeSetGamma" >&6; } +if test "x$ac_cv_lib_Xxf86vm_XF86VidModeSetGamma" = xyes; then : have_xf86gamma=yes -else $as_nop +else true fi @@ -9568,12 +10874,11 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XF86VidModeSetGammaRamp in -lXxf86vm" >&5 -printf %s "checking for XF86VidModeSetGammaRamp in -lXxf86vm... " >&6; } -if test ${ac_cv_lib_Xxf86vm_XF86VidModeSetGammaRamp+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XF86VidModeSetGammaRamp in -lXxf86vm" >&5 +$as_echo_n "checking for XF86VidModeSetGammaRamp in -lXxf86vm... " >&6; } +if ${ac_cv_lib_Xxf86vm_XF86VidModeSetGammaRamp+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lXxf86vm -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -9582,31 +10887,32 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char XF86VidModeSetGammaRamp (); int -main (void) +main () { return XF86VidModeSetGammaRamp (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xxf86vm_XF86VidModeSetGammaRamp=yes -else $as_nop +else ac_cv_lib_Xxf86vm_XF86VidModeSetGammaRamp=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xxf86vm_XF86VidModeSetGammaRamp" >&5 -printf "%s\n" "$ac_cv_lib_Xxf86vm_XF86VidModeSetGammaRamp" >&6; } -if test "x$ac_cv_lib_Xxf86vm_XF86VidModeSetGammaRamp" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xxf86vm_XF86VidModeSetGammaRamp" >&5 +$as_echo "$ac_cv_lib_Xxf86vm_XF86VidModeSetGammaRamp" >&6; } +if test "x$ac_cv_lib_Xxf86vm_XF86VidModeSetGammaRamp" = xyes; then : have_xf86gamma_ramp=yes -else $as_nop +else true fi @@ -9618,12 +10924,12 @@ fi # if those tests succeeded, then we've really got the functions. if test "$have_xf86gamma" = yes; then - printf "%s\n" "#define HAVE_XF86VMODE_GAMMA 1" >>confdefs.h + $as_echo "#define HAVE_XF86VMODE_GAMMA 1" >>confdefs.h fi if test "$have_xf86gamma_ramp" = yes; then - printf "%s\n" "#define HAVE_XF86VMODE_GAMMA_RAMP 1" >>confdefs.h + $as_echo "#define HAVE_XF86VMODE_GAMMA_RAMP 1" >>confdefs.h fi @@ -9647,10 +10953,9 @@ have_xidle=no with_xidle_req=unspecified # Check whether --with-xidle-ext was given. -if test ${with_xidle_ext+y} -then : +if test "${with_xidle_ext+set}" = set; then : withval=$with_xidle_ext; with_xidle="$withval"; with_xidle_req="$withval" -else $as_nop +else with_xidle=yes fi @@ -9659,28 +10964,28 @@ fi no) ;; /*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XIDLE headers" >&5 -printf %s "checking for XIDLE headers... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XIDLE headers" >&5 +$as_echo_n "checking for XIDLE headers... " >&6; } d=$with_xidle/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XIDLE libs" >&5 -printf %s "checking for XIDLE libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XIDLE libs" >&5 +$as_echo_n "checking for XIDLE libs... " >&6; } d=$with_xidle/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". @@ -9707,10 +11012,9 @@ if test "$with_xidle" = yes; then CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/extensions/xidle.h" "ac_cv_header_X11_extensions_xidle_h" "#include " -if test "x$ac_cv_header_X11_extensions_xidle_h" = xyes -then : +if test "x$ac_cv_header_X11_extensions_xidle_h" = xyes; then : have_xidle=yes - printf "%s\n" "#define HAVE_XIDLE_EXTENSION 1" >>confdefs.h + $as_echo "#define HAVE_XIDLE_EXTENSION 1" >>confdefs.h fi @@ -9744,8 +11048,7 @@ if test "$with_mit" = yes; then CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/extensions/scrnsaver.h" "ac_cv_header_X11_extensions_scrnsaver_h" "#include " -if test "x$ac_cv_header_X11_extensions_scrnsaver_h" = xyes -then : +if test "x$ac_cv_header_X11_extensions_scrnsaver_h" = xyes; then : have_mit=yes fi @@ -9774,12 +11077,11 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XScreenSaverRegister in -lXext" >&5 -printf %s "checking for XScreenSaverRegister in -lXext... " >&6; } -if test ${ac_cv_lib_Xext_XScreenSaverRegister+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XScreenSaverRegister in -lXext" >&5 +$as_echo_n "checking for XScreenSaverRegister in -lXext... " >&6; } +if ${ac_cv_lib_Xext_XScreenSaverRegister+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -9788,31 +11090,32 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char XScreenSaverRegister (); int -main (void) +main () { return XScreenSaverRegister (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xext_XScreenSaverRegister=yes -else $as_nop +else ac_cv_lib_Xext_XScreenSaverRegister=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xext_XScreenSaverRegister" >&5 -printf "%s\n" "$ac_cv_lib_Xext_XScreenSaverRegister" >&6; } -if test "x$ac_cv_lib_Xext_XScreenSaverRegister" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xext_XScreenSaverRegister" >&5 +$as_echo "$ac_cv_lib_Xext_XScreenSaverRegister" >&6; } +if test "x$ac_cv_lib_Xext_XScreenSaverRegister" = xyes; then : true -else $as_nop +else have_mit=no fi @@ -9842,12 +11145,11 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XScreenSaverRegister in -lXExExt" >&5 -printf %s "checking for XScreenSaverRegister in -lXExExt... " >&6; } -if test ${ac_cv_lib_XExExt_XScreenSaverRegister+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XScreenSaverRegister in -lXExExt" >&5 +$as_echo_n "checking for XScreenSaverRegister in -lXExExt... " >&6; } +if ${ac_cv_lib_XExExt_XScreenSaverRegister+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lXExExt -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -9856,31 +11158,32 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char XScreenSaverRegister (); int -main (void) +main () { return XScreenSaverRegister (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_XExExt_XScreenSaverRegister=yes -else $as_nop +else ac_cv_lib_XExExt_XScreenSaverRegister=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_XExExt_XScreenSaverRegister" >&5 -printf "%s\n" "$ac_cv_lib_XExExt_XScreenSaverRegister" >&6; } -if test "x$ac_cv_lib_XExExt_XScreenSaverRegister" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_XExExt_XScreenSaverRegister" >&5 +$as_echo "$ac_cv_lib_XExExt_XScreenSaverRegister" >&6; } +if test "x$ac_cv_lib_XExExt_XScreenSaverRegister" = xyes; then : have_mit=yes; SAVER_LIBS="$SAVER_LIBS -lXExExt" -else $as_nop +else true fi @@ -9914,12 +11217,11 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XScreenSaverRegister in -lXss" >&5 -printf %s "checking for XScreenSaverRegister in -lXss... " >&6; } -if test ${ac_cv_lib_Xss_XScreenSaverRegister+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XScreenSaverRegister in -lXss" >&5 +$as_echo_n "checking for XScreenSaverRegister in -lXss... " >&6; } +if ${ac_cv_lib_Xss_XScreenSaverRegister+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lXss -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -9928,31 +11230,32 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char XScreenSaverRegister (); int -main (void) +main () { return XScreenSaverRegister (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xss_XScreenSaverRegister=yes -else $as_nop +else ac_cv_lib_Xss_XScreenSaverRegister=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xss_XScreenSaverRegister" >&5 -printf "%s\n" "$ac_cv_lib_Xss_XScreenSaverRegister" >&6; } -if test "x$ac_cv_lib_Xss_XScreenSaverRegister" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xss_XScreenSaverRegister" >&5 +$as_echo "$ac_cv_lib_Xss_XScreenSaverRegister" >&6; } +if test "x$ac_cv_lib_Xss_XScreenSaverRegister" = xyes; then : have_mit=yes; SAVER_LIBS="$SAVER_LIBS -lXss" -else $as_nop +else true fi @@ -9985,10 +11288,9 @@ have_sgi=no with_sgi_req=unspecified # Check whether --with-sgi-ext was given. -if test ${with_sgi_ext+y} -then : +if test "${with_sgi_ext+set}" = set; then : withval=$with_sgi_ext; with_sgi="$withval"; with_sgi_req="$withval" -else $as_nop +else with_sgi=$ac_irix fi @@ -9997,28 +11299,28 @@ fi no) ;; /*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SGI SCREEN_SAVER headers" >&5 -printf %s "checking for SGI SCREEN_SAVER headers... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SGI SCREEN_SAVER headers" >&5 +$as_echo_n "checking for SGI SCREEN_SAVER headers... " >&6; } d=$with_sgi/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SGI SCREEN_SAVER libs" >&5 -printf %s "checking for SGI SCREEN_SAVER libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SGI SCREEN_SAVER libs" >&5 +$as_echo_n "checking for SGI SCREEN_SAVER libs... " >&6; } d=$with_sgi/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". @@ -10045,10 +11347,9 @@ if test "$with_sgi" = yes; then CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/extensions/XScreenSaver.h" "ac_cv_header_X11_extensions_XScreenSaver_h" "#include " -if test "x$ac_cv_header_X11_extensions_XScreenSaver_h" = xyes -then : +if test "x$ac_cv_header_X11_extensions_XScreenSaver_h" = xyes; then : have_sgi=yes - printf "%s\n" "#define HAVE_SGI_SAVER_EXTENSION 1" >>confdefs.h + $as_echo "#define HAVE_SGI_SAVER_EXTENSION 1" >>confdefs.h fi @@ -10069,10 +11370,9 @@ have_sgivc=no with_sgivc_req=unspecified # Check whether --with-sgivc-ext was given. -if test ${with_sgivc_ext+y} -then : +if test "${with_sgivc_ext+set}" = set; then : withval=$with_sgivc_ext; with_sgivc="$withval"; with_sgivc_req="$withval" -else $as_nop +else with_sgivc=$ac_irix fi @@ -10081,28 +11381,28 @@ fi no) ;; /*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SGI-VIDEO-CONTROL headers" >&5 -printf %s "checking for SGI-VIDEO-CONTROL headers... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SGI-VIDEO-CONTROL headers" >&5 +$as_echo_n "checking for SGI-VIDEO-CONTROL headers... " >&6; } d=$with_sgivc/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SGI-VIDEO-CONTROL libs" >&5 -printf %s "checking for SGI-VIDEO-CONTROL libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SGI-VIDEO-CONTROL libs" >&5 +$as_echo_n "checking for SGI-VIDEO-CONTROL libs... " >&6; } d=$with_sgivc/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". @@ -10131,8 +11431,7 @@ if test "$with_sgivc" = yes; then CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/extensions/XSGIvc.h" "ac_cv_header_X11_extensions_XSGIvc_h" "#include " -if test "x$ac_cv_header_X11_extensions_XSGIvc_h" = xyes -then : +if test "x$ac_cv_header_X11_extensions_XSGIvc_h" = xyes; then : have_sgivc=yes fi @@ -10160,12 +11459,11 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XSGIvcQueryGammaMap in -lXsgivc" >&5 -printf %s "checking for XSGIvcQueryGammaMap in -lXsgivc... " >&6; } -if test ${ac_cv_lib_Xsgivc_XSGIvcQueryGammaMap+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XSGIvcQueryGammaMap in -lXsgivc" >&5 +$as_echo_n "checking for XSGIvcQueryGammaMap in -lXsgivc... " >&6; } +if ${ac_cv_lib_Xsgivc_XSGIvcQueryGammaMap+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lXsgivc -lXext -lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -10174,31 +11472,32 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char XSGIvcQueryGammaMap (); int -main (void) +main () { return XSGIvcQueryGammaMap (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xsgivc_XSGIvcQueryGammaMap=yes -else $as_nop +else ac_cv_lib_Xsgivc_XSGIvcQueryGammaMap=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xsgivc_XSGIvcQueryGammaMap" >&5 -printf "%s\n" "$ac_cv_lib_Xsgivc_XSGIvcQueryGammaMap" >&6; } -if test "x$ac_cv_lib_Xsgivc_XSGIvcQueryGammaMap" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xsgivc_XSGIvcQueryGammaMap" >&5 +$as_echo "$ac_cv_lib_Xsgivc_XSGIvcQueryGammaMap" >&6; } +if test "x$ac_cv_lib_Xsgivc_XSGIvcQueryGammaMap" = xyes; then : have_sgivc=yes; SAVER_LIBS="$SAVER_LIBS -lXsgivc" -else $as_nop +else true fi @@ -10210,7 +11509,7 @@ fi # if that succeeded, then we've really got it. if test "$have_sgivc" = yes; then - printf "%s\n" "#define HAVE_SGI_VC_EXTENSION 1" >>confdefs.h + $as_echo "#define HAVE_SGI_VC_EXTENSION 1" >>confdefs.h fi @@ -10229,10 +11528,9 @@ have_readdisplay=no with_readdisplay_req=unspecified # Check whether --with-readdisplay was given. -if test ${with_readdisplay+y} -then : +if test "${with_readdisplay+set}" = set; then : withval=$with_readdisplay; with_readdisplay="$withval"; with_readdisplay_req="$withval" -else $as_nop +else with_readdisplay=$ac_irix fi @@ -10241,28 +11539,28 @@ fi no) ;; /*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XReadDisplay headers" >&5 -printf %s "checking for XReadDisplay headers... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XReadDisplay headers" >&5 +$as_echo_n "checking for XReadDisplay headers... " >&6; } d=$with_readdisplay/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XReadDisplay libs" >&5 -printf %s "checking for XReadDisplay libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XReadDisplay libs" >&5 +$as_echo_n "checking for XReadDisplay libs... " >&6; } d=$with_readdisplay/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". @@ -10289,9 +11587,8 @@ if test "$with_readdisplay" = yes; then CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/extensions/readdisplay.h" "ac_cv_header_X11_extensions_readdisplay_h" "#include " -if test "x$ac_cv_header_X11_extensions_readdisplay_h" = xyes -then : - printf "%s\n" "#define HAVE_READ_DISPLAY_EXTENSION 1" >>confdefs.h +if test "x$ac_cv_header_X11_extensions_readdisplay_h" = xyes; then : + $as_echo "#define HAVE_READ_DISPLAY_EXTENSION 1" >>confdefs.h fi @@ -10311,10 +11608,9 @@ have_xshm=no with_xshm_req=unspecified # Check whether --with-xshm-ext was given. -if test ${with_xshm_ext+y} -then : +if test "${with_xshm_ext+set}" = set; then : withval=$with_xshm_ext; with_xshm="$withval"; with_xshm_req="$withval" -else $as_nop +else with_xshm=yes fi @@ -10323,28 +11619,28 @@ fi no) ;; /*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XSHM headers" >&5 -printf %s "checking for XSHM headers... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XSHM headers" >&5 +$as_echo_n "checking for XSHM headers... " >&6; } d=$with_xshm/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XSHM libs" >&5 -printf %s "checking for XSHM libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XSHM libs" >&5 +$as_echo_n "checking for XSHM libs... " >&6; } d=$with_xshm/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". @@ -10373,8 +11669,7 @@ if test "$with_xshm" = yes; then CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/extensions/XShm.h" "ac_cv_header_X11_extensions_XShm_h" "#include " -if test "x$ac_cv_header_X11_extensions_XShm_h" = xyes -then : +if test "x$ac_cv_header_X11_extensions_XShm_h" = xyes; then : have_xshm=yes fi @@ -10390,9 +11685,8 @@ fi fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` - ac_fn_c_check_header_compile "$LINENO" "sys/ipc.h" "ac_cv_header_sys_ipc_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_ipc_h" = xyes -then : + ac_fn_c_check_header_mongrel "$LINENO" "sys/ipc.h" "ac_cv_header_sys_ipc_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_ipc_h" = xyes; then : have_xshm=yes fi @@ -10409,9 +11703,8 @@ fi fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` - ac_fn_c_check_header_compile "$LINENO" "sys/shm.h" "ac_cv_header_sys_shm_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_shm_h" = xyes -then : + ac_fn_c_check_header_mongrel "$LINENO" "sys/shm.h" "ac_cv_header_sys_shm_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_shm_h" = xyes; then : have_xshm=yes fi @@ -10447,12 +11740,11 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XShmQueryExtension in -lXextSam" >&5 -printf %s "checking for XShmQueryExtension in -lXextSam... " >&6; } -if test ${ac_cv_lib_XextSam_XShmQueryExtension+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XShmQueryExtension in -lXextSam" >&5 +$as_echo_n "checking for XShmQueryExtension in -lXextSam... " >&6; } +if ${ac_cv_lib_XextSam_XShmQueryExtension+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lXextSam -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -10461,31 +11753,32 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char XShmQueryExtension (); int -main (void) +main () { return XShmQueryExtension (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_XextSam_XShmQueryExtension=yes -else $as_nop +else ac_cv_lib_XextSam_XShmQueryExtension=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_XextSam_XShmQueryExtension" >&5 -printf "%s\n" "$ac_cv_lib_XextSam_XShmQueryExtension" >&6; } -if test "x$ac_cv_lib_XextSam_XShmQueryExtension" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_XextSam_XShmQueryExtension" >&5 +$as_echo "$ac_cv_lib_XextSam_XShmQueryExtension" >&6; } +if test "x$ac_cv_lib_XextSam_XShmQueryExtension" = xyes; then : have_xshm=yes; X_EXTRA_LIBS="$X_EXTRA_LIBS -lXextSam" -else $as_nop +else true fi @@ -10499,7 +11792,7 @@ fi # if that succeeded, then we've really got it. if test "$have_xshm" = yes; then - printf "%s\n" "#define HAVE_XSHM_EXTENSION 1" >>confdefs.h + $as_echo "#define HAVE_XSHM_EXTENSION 1" >>confdefs.h fi @@ -10518,10 +11811,9 @@ have_xdbe=no with_xdbe_req=unspecified # Check whether --with-xdbe-ext was given. -if test ${with_xdbe_ext+y} -then : +if test "${with_xdbe_ext+set}" = set; then : withval=$with_xdbe_ext; with_xdbe="$withval"; with_xdbe_req="$withval" -else $as_nop +else with_xdbe=yes fi @@ -10530,28 +11822,28 @@ fi no) ;; /*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for DOUBLE-BUFFER headers" >&5 -printf %s "checking for DOUBLE-BUFFER headers... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DOUBLE-BUFFER headers" >&5 +$as_echo_n "checking for DOUBLE-BUFFER headers... " >&6; } d=$with_xdbe/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for DOUBLE-BUFFER libs" >&5 -printf %s "checking for DOUBLE-BUFFER libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DOUBLE-BUFFER libs" >&5 +$as_echo_n "checking for DOUBLE-BUFFER libs... " >&6; } d=$with_xdbe/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". @@ -10578,14 +11870,13 @@ if test "$with_xdbe" = yes; then CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/extensions/Xdbe.h" "ac_cv_header_X11_extensions_Xdbe_h" "#include " -if test "x$ac_cv_header_X11_extensions_Xdbe_h" = xyes -then : +if test "x$ac_cv_header_X11_extensions_Xdbe_h" = xyes; then : have_xdbe=yes fi CPPFLAGS="$ac_save_CPPFLAGS" if test "$have_xdbe" = yes; then - printf "%s\n" "#define HAVE_DOUBLE_BUFFER_EXTENSION 1" >>confdefs.h + $as_echo "#define HAVE_DOUBLE_BUFFER_EXTENSION 1" >>confdefs.h fi @@ -10633,10 +11924,9 @@ have_xkb=no with_xkb_req=unspecified # Check whether --with-xkb-ext was given. -if test ${with_xkb_ext+y} -then : +if test "${with_xkb_ext+set}" = set; then : withval=$with_xkb_ext; with_xkb="$withval"; with_xkb_req="$withval" -else $as_nop +else with_xkb=yes fi @@ -10645,28 +11935,28 @@ fi no) ;; /*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XKB headers" >&5 -printf %s "checking for XKB headers... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XKB headers" >&5 +$as_echo_n "checking for XKB headers... " >&6; } d=$with_xkb/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XKB libs" >&5 -printf %s "checking for XKB libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XKB libs" >&5 +$as_echo_n "checking for XKB libs... " >&6; } d=$with_xkb/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". @@ -10693,169 +11983,29 @@ if test "$with_xkb" = yes; then CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "X11/XKBlib.h" "ac_cv_header_X11_XKBlib_h" "#include " -if test "x$ac_cv_header_X11_XKBlib_h" = xyes -then : +if test "x$ac_cv_header_X11_XKBlib_h" = xyes; then : have_xkb=yes fi CPPFLAGS="$ac_save_CPPFLAGS" if test "$have_xkb" = yes; then - printf "%s\n" "#define HAVE_XKB 1" >>confdefs.h - - fi - -elif test "$with_xkb" != no; then - echo "error: must be yes or no: --with-xkb-ext=$with_xshm" - exit 1 -fi - -############################################################################### -# -# Check for HP XHPDisableReset and XHPEnableReset. -# -############################################################################### - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XHPDisableReset in X11/XHPlib.h" >&5 -printf %s "checking for XHPDisableReset in X11/XHPlib.h... " >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -printf %s "checking for grep that handles long lines and -e... " >&6; } -if test ${ac_cv_path_GREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in grep ggrep - do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_GREP" || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - printf %s 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - printf "%s\n" 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -rf conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -printf "%s\n" "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -printf %s "checking for egrep... " >&6; } -if test ${ac_cv_path_EGREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in egrep - do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - printf %s 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - printf "%s\n" 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -rf conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi + $as_echo "#define HAVE_XKB 1" >>confdefs.h - fi + fi + +elif test "$with_xkb" != no; then + echo "error: must be yes or no: --with-xkb-ext=$with_xshm" + exit 1 fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -printf "%s\n" "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" + +############################################################################### +# +# Check for HP XHPDisableReset and XHPEnableReset. +# +############################################################################### + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for XHPDisableReset in X11/XHPlib.h" >&5 +$as_echo_n "checking for XHPDisableReset in X11/XHPlib.h... " >&6; } ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then @@ -10869,16 +12019,15 @@ printf "%s\n" "$ac_cv_path_EGREP" >&6; } _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "XHPDisableReset" >/dev/null 2>&1 -then : - printf "%s\n" "#define HAVE_XHPDISABLERESET 1" >>confdefs.h + $EGREP "XHPDisableReset" >/dev/null 2>&1; then : + $as_echo "#define HAVE_XHPDISABLERESET 1" >>confdefs.h SAVER_LIBS="-lXhp11 $SAVER_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi rm -rf conftest* @@ -10894,10 +12043,9 @@ have_proc_interrupts=no with_proc_interrupts_req=unspecified # Check whether --with-proc-interrupts was given. -if test ${with_proc_interrupts+y} -then : +if test "${with_proc_interrupts+set}" = set; then : withval=$with_proc_interrupts; with_proc_interrupts="$withval"; with_proc_interrupts_req="$withval" -else $as_nop +else with_proc_interrupts=no fi @@ -10910,25 +12058,24 @@ if test "$with_proc_interrupts" = yes; then have_proc_interrupts=yes if test -f /proc/interrupts; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether /proc/interrupts contains keyboard data" >&5 -printf %s "checking whether /proc/interrupts contains keyboard data... " >&6; } -if test ${ac_cv_have_proc_interrupts+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether /proc/interrupts contains keyboard data" >&5 +$as_echo_n "checking whether /proc/interrupts contains keyboard data... " >&6; } +if ${ac_cv_have_proc_interrupts+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_cv_have_proc_interrupts=no if grep 'keyboard\|i8042' /proc/interrupts >/dev/null 2>&1 ; then ac_cv_have_proc_interrupts=yes fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_proc_interrupts" >&5 -printf "%s\n" "$ac_cv_have_proc_interrupts" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_proc_interrupts" >&5 +$as_echo "$ac_cv_have_proc_interrupts" >&6; } have_proc_interrupts=$ac_cv_have_proc_interrupts fi if test "$have_proc_interrupts" = yes; then - printf "%s\n" "#define HAVE_PROC_INTERRUPTS 1" >>confdefs.h + $as_echo "#define HAVE_PROC_INTERRUPTS 1" >>confdefs.h fi @@ -10948,10 +12095,9 @@ have_proc_oom=no with_proc_oom_req=unspecified # Check whether --with-proc-oom was given. -if test ${with_proc_oom+y} -then : +if test "${with_proc_oom+set}" = set; then : withval=$with_proc_oom; with_proc_oom="$withval"; with_proc_oom_req="$withval" -else $as_nop +else with_proc_oom=yes fi @@ -10961,33 +12107,32 @@ if test "$with_proc_oom_req" = yes; then # without a proper /proc filesystem. # have_proc_oom=yes - printf "%s\n" "#define HAVE_PROC_OOM 1" >>confdefs.h + $as_echo "#define HAVE_PROC_OOM 1" >>confdefs.h elif test "$with_proc_oom_req" = unspecified; then have_proc_oom=no - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether /proc/$$/oom_score_adj exists" >&5 -printf %s "checking whether /proc/$$/oom_score_adj exists... " >&6; } -if test ${ac_cv_have_proc_oom+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether /proc/$$/oom_score_adj exists" >&5 +$as_echo_n "checking whether /proc/$$/oom_score_adj exists... " >&6; } +if ${ac_cv_have_proc_oom+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_cv_have_proc_oom=no if test -f /proc/$$/oom_score_adj; then ac_cv_have_proc_oom=yes fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_proc_oom" >&5 -printf "%s\n" "$ac_cv_have_proc_oom" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_proc_oom" >&5 +$as_echo "$ac_cv_have_proc_oom" >&6; } have_proc_oom=$ac_cv_have_proc_oom if test "$have_proc_oom" = yes; then - printf "%s\n" "#define HAVE_PROC_OOM 1" >>confdefs.h + $as_echo "#define HAVE_PROC_OOM 1" >>confdefs.h # Only root can write to /proc/$$/oom_score_adj, even though it's us. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: enabling setuid to opt out of OOM-killer." >&5 -printf "%s\n" "enabling setuid to opt out of OOM-killer." >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: enabling setuid to opt out of OOM-killer." >&5 +$as_echo "enabling setuid to opt out of OOM-killer." >&6; } setuid_auth=yes fi @@ -11008,10 +12153,9 @@ systemd_halfassed=no systemd_too_old=no # Check whether --with-systemd was given. -if test ${with_systemd+y} -then : +if test "${with_systemd+set}" = set; then : withval=$with_systemd; with_systemd="$withval"; with_systemd_req="$withval" -else $as_nop +else with_systemd=yes fi @@ -11020,28 +12164,28 @@ fi no) ;; /*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for systemd headers" >&5 -printf %s "checking for systemd headers... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for systemd headers" >&5 +$as_echo_n "checking for systemd headers... " >&6; } d=$with_systemd/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for systemd libs" >&5 -printf %s "checking for systemd libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for systemd libs" >&5 +$as_echo_n "checking for systemd libs... " >&6; } d=$with_systemd/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". @@ -11077,26 +12221,24 @@ if test "$with_systemd" = yes; then fi if test "$have_systemd" = yes; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libsystemd includes" >&5 -printf %s "checking for libsystemd includes... " >&6; } -if test ${ac_cv_systemd_config_cflags+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libsystemd includes" >&5 +$as_echo_n "checking for libsystemd includes... " >&6; } +if ${ac_cv_systemd_config_cflags+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_cv_systemd_config_cflags=`$pkg_config --cflags $pkgs` fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_systemd_config_cflags" >&5 -printf "%s\n" "$ac_cv_systemd_config_cflags" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libsystemd libs" >&5 -printf %s "checking for libsystemd libs... " >&6; } -if test ${ac_cv_systemd_config_libs+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_systemd_config_cflags" >&5 +$as_echo "$ac_cv_systemd_config_cflags" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libsystemd libs" >&5 +$as_echo_n "checking for libsystemd libs... " >&6; } +if ${ac_cv_systemd_config_libs+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_cv_systemd_config_libs=`$pkg_config --libs $pkgs` fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_systemd_config_libs" >&5 -printf "%s\n" "$ac_cv_systemd_config_libs" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_systemd_config_libs" >&5 +$as_echo "$ac_cv_systemd_config_libs" >&6; } fi ac_systemd_config_cflags=$ac_cv_systemd_config_cflags @@ -11117,9 +12259,8 @@ printf "%s\n" "$ac_cv_systemd_config_libs" >&6; } fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` - ac_fn_c_check_header_compile "$LINENO" "systemd/sd-bus.h" "ac_cv_header_systemd_sd_bus_h" "$ac_includes_default" -if test "x$ac_cv_header_systemd_sd_bus_h" = xyes -then : + ac_fn_c_check_header_mongrel "$LINENO" "systemd/sd-bus.h" "ac_cv_header_systemd_sd_bus_h" "$ac_includes_default" +if test "x$ac_cv_header_systemd_sd_bus_h" = xyes; then : have_systemd=yes fi @@ -11132,8 +12273,8 @@ fi # we have the headers, now check for the libraries have_systemd=no systemd_halfassed=yes - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking for libsystemd usability..." >&5 -printf "%s\n" "checking for libsystemd usability..." >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for libsystemd usability..." >&5 +$as_echo "checking for libsystemd usability..." >&6; } # sd_bus_track_count_name was added in some later version of systemd. ac_save_CPPFLAGS="$CPPFLAGS" @@ -11154,12 +12295,11 @@ printf "%s\n" "checking for libsystemd usability..." >&6; } CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sd_bus_track_count_name in -lc" >&5 -printf %s "checking for sd_bus_track_count_name in -lc... " >&6; } -if test ${ac_cv_lib_c_sd_bus_track_count_name+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sd_bus_track_count_name in -lc" >&5 +$as_echo_n "checking for sd_bus_track_count_name in -lc... " >&6; } +if ${ac_cv_lib_c_sd_bus_track_count_name+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $ac_systemd_config_libs -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -11168,29 +12308,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char sd_bus_track_count_name (); int -main (void) +main () { return sd_bus_track_count_name (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_sd_bus_track_count_name=yes -else $as_nop +else ac_cv_lib_c_sd_bus_track_count_name=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_sd_bus_track_count_name" >&5 -printf "%s\n" "$ac_cv_lib_c_sd_bus_track_count_name" >&6; } -if test "x$ac_cv_lib_c_sd_bus_track_count_name" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_sd_bus_track_count_name" >&5 +$as_echo "$ac_cv_lib_c_sd_bus_track_count_name" >&6; } +if test "x$ac_cv_lib_c_sd_bus_track_count_name" = xyes; then : have_systemd=yes; systemd_halfassed=no fi @@ -11201,8 +12342,8 @@ fi fi if test "$have_systemd" = no; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking for libsystemd usability... no" >&5 -printf "%s\n" "checking for libsystemd usability... no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for libsystemd usability... no" >&5 +$as_echo "checking for libsystemd usability... no" >&6; } fi fi @@ -11210,7 +12351,7 @@ if test "$have_systemd" = yes; then INCLUDES="$INCLUDES $ac_systemd_config_cflags" EXES_SYSTEMD='$(EXES_SYSTEMD)' SYSTEMD_LIBS="$ac_systemd_config_libs" - printf "%s\n" "#define HAVE_LIBSYSTEMD 1" >>confdefs.h + $as_echo "#define HAVE_LIBSYSTEMD 1" >>confdefs.h else EXES_SYSTEMD='' @@ -11229,10 +12370,9 @@ elogind_halfassed=no elogind_too_old=no # Check whether --with-elogind was given. -if test ${with_elogind+y} -then : +if test "${with_elogind+set}" = set; then : withval=$with_elogind; with_elogind="$withval"; with_elogind_req="$withval" -else $as_nop +else with_elogind=yes fi @@ -11241,28 +12381,28 @@ fi no) ;; /*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for elogind headers" >&5 -printf %s "checking for elogind headers... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for elogind headers" >&5 +$as_echo_n "checking for elogind headers... " >&6; } d=$with_elogind/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for elogind libs" >&5 -printf %s "checking for elogind libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for elogind libs" >&5 +$as_echo_n "checking for elogind libs... " >&6; } d=$with_elogind/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". @@ -11298,26 +12438,24 @@ if test "$with_elogind" = yes; then fi if test "$have_elogind" = yes; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libelogind includes" >&5 -printf %s "checking for libelogind includes... " >&6; } -if test ${ac_cv_elogind_config_cflags+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libelogind includes" >&5 +$as_echo_n "checking for libelogind includes... " >&6; } +if ${ac_cv_elogind_config_cflags+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_cv_elogind_config_cflags=`$pkg_config --cflags $pkgs` fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_elogind_config_cflags" >&5 -printf "%s\n" "$ac_cv_elogind_config_cflags" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libelogind libs" >&5 -printf %s "checking for libelogind libs... " >&6; } -if test ${ac_cv_elogind_config_libs+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_elogind_config_cflags" >&5 +$as_echo "$ac_cv_elogind_config_cflags" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libelogind libs" >&5 +$as_echo_n "checking for libelogind libs... " >&6; } +if ${ac_cv_elogind_config_libs+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_cv_elogind_config_libs=`$pkg_config --libs $pkgs` fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_elogind_config_libs" >&5 -printf "%s\n" "$ac_cv_elogind_config_libs" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_elogind_config_libs" >&5 +$as_echo "$ac_cv_elogind_config_libs" >&6; } fi ac_elogind_config_cflags=$ac_cv_elogind_config_cflags @@ -11338,9 +12476,8 @@ printf "%s\n" "$ac_cv_elogind_config_libs" >&6; } fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` - ac_fn_c_check_header_compile "$LINENO" "elogind/sd-bus.h" "ac_cv_header_elogind_sd_bus_h" "$ac_includes_default" -if test "x$ac_cv_header_elogind_sd_bus_h" = xyes -then : + ac_fn_c_check_header_mongrel "$LINENO" "elogind/sd-bus.h" "ac_cv_header_elogind_sd_bus_h" "$ac_includes_default" +if test "x$ac_cv_header_elogind_sd_bus_h" = xyes; then : have_elogind=yes fi @@ -11353,8 +12490,8 @@ fi # we have the headers, now check for the libraries have_elogind=no elogind_halfassed=yes - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking for libelogind usability..." >&5 -printf "%s\n" "checking for libelogind usability..." >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for libelogind usability..." >&5 +$as_echo "checking for libelogind usability..." >&6; } ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" @@ -11374,12 +12511,11 @@ printf "%s\n" "checking for libelogind usability..." >&6; } CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sd_bus_track_count_name in -lc" >&5 -printf %s "checking for sd_bus_track_count_name in -lc... " >&6; } -if test ${ac_cv_lib_c_sd_bus_track_count_name+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sd_bus_track_count_name in -lc" >&5 +$as_echo_n "checking for sd_bus_track_count_name in -lc... " >&6; } +if ${ac_cv_lib_c_sd_bus_track_count_name+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $ac_elogind_config_libs -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -11388,29 +12524,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char sd_bus_track_count_name (); int -main (void) +main () { return sd_bus_track_count_name (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_sd_bus_track_count_name=yes -else $as_nop +else ac_cv_lib_c_sd_bus_track_count_name=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_sd_bus_track_count_name" >&5 -printf "%s\n" "$ac_cv_lib_c_sd_bus_track_count_name" >&6; } -if test "x$ac_cv_lib_c_sd_bus_track_count_name" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_sd_bus_track_count_name" >&5 +$as_echo "$ac_cv_lib_c_sd_bus_track_count_name" >&6; } +if test "x$ac_cv_lib_c_sd_bus_track_count_name" = xyes; then : have_elogind=yes; elogind_halfassed=no fi @@ -11421,8 +12558,8 @@ fi fi if test "$have_elogind" = no; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking for libelogind usability... no" >&5 -printf "%s\n" "checking for libelogind usability... no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for libelogind usability... no" >&5 +$as_echo "checking for libelogind usability... no" >&6; } fi fi @@ -11430,7 +12567,7 @@ if test "$have_elogind" = yes; then INCLUDES="$INCLUDES $ac_elogind_config_cflags" EXES_SYSTEMD='$(EXES_SYSTEMD)' SYSTEMD_LIBS="$ac_elogind_config_libs" - printf "%s\n" "#define HAVE_LIBELOGIND 1" >>confdefs.h + $as_echo "#define HAVE_LIBELOGIND 1" >>confdefs.h fi @@ -11446,11 +12583,10 @@ fi ############################################################################### # Check whether --enable-locking was given. -if test ${enable_locking+y} -then : +if test "${enable_locking+set}" = set; then : enableval=$enable_locking; # This is documented elsewhere because of --enable/--with option sorting. enable_locking="$enableval" -else $as_nop +else if test "$ac_macosx" = yes; then # We can't lock on macOS, so default to not compiling in support for it. # But allow --enable-locking to override that, so I can debug Linux locking @@ -11464,7 +12600,7 @@ fi if test "$enable_locking" = yes; then true elif test "$enable_locking" = no; then - printf "%s\n" "#define NO_LOCKING 1" >>confdefs.h + $as_echo "#define NO_LOCKING 1" >>confdefs.h else echo "error: must be yes or no: --enable-locking=$enable_locking" @@ -11478,16 +12614,15 @@ fi ############################################################################### # Check whether --enable-root-passwd was given. -if test ${enable_root_passwd+y} -then : +if test "${enable_root_passwd+set}" = set; then : enableval=$enable_root_passwd; # This is documented elsewhere because of --enable/--with option sorting. enable_root_passwd="$enableval" -else $as_nop +else enable_root_passwd=no fi if test "$enable_root_passwd" = yes; then - printf "%s\n" "#define ALLOW_ROOT_PASSWD 1" >>confdefs.h + $as_echo "#define ALLOW_ROOT_PASSWD 1" >>confdefs.h true elif test "$enable_root_passwd" != no; then @@ -11523,32 +12658,29 @@ have_pam=no with_pam_req=unspecified # Check whether --with-pam was given. -if test ${with_pam+y} -then : +if test "${with_pam+set}" = set; then : withval=$with_pam; with_pam="$withval"; with_pam_req="$withval" -else $as_nop +else with_pam=$with_pam_default fi # Check whether --with-pam_service_name was given. -if test ${with_pam_service_name+y} -then : +if test "${with_pam_service_name+set}" = set; then : withval=$with_pam_service_name; pam_service_name="$withval" -else $as_nop +else pam_service_name="xscreensaver" fi # Check whether --enable-pam-check-account-type was given. -if test ${enable_pam_check_account_type+y} -then : +if test "${enable_pam_check_account_type+set}" = set; then : enableval=$enable_pam_check_account_type; # This is documented elsewhere because of --enable/--with option sorting. enable_pam_check_account_type="$enableval" -else $as_nop +else enable_pam_check_account_type=no fi if test "$enable_pam_check_account_type" = yes ; then - printf "%s\n" "#define PAM_CHECK_ACCOUNT_TYPE 1" >>confdefs.h + $as_echo "#define PAM_CHECK_ACCOUNT_TYPE 1" >>confdefs.h true elif test "$enable_pam_check_account_type" != no ; then @@ -11561,28 +12693,28 @@ fi no) ;; /*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PAM headers" >&5 -printf %s "checking for PAM headers... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PAM headers" >&5 +$as_echo_n "checking for PAM headers... " >&6; } d=$with_pam/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PAM libs" >&5 -printf %s "checking for PAM libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PAM libs" >&5 +$as_echo_n "checking for PAM libs... " >&6; } d=$with_pam/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". @@ -11600,12 +12732,11 @@ printf "%s\n" "not found ($d: no such directory)" >&6; } esac if test "$enable_locking" = yes -a "$with_pam" = yes; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PAM" >&5 -printf %s "checking for PAM... " >&6; } -if test ${ac_cv_pam+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PAM" >&5 +$as_echo_n "checking for PAM... " >&6; } +if ${ac_cv_pam+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then @@ -11617,40 +12748,40 @@ else $as_nop /* end confdefs.h. */ #include int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_pam=yes -else $as_nop +else ac_cv_pam=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_pam" >&5 -printf "%s\n" "$ac_cv_pam" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_pam" >&5 +$as_echo "$ac_cv_pam" >&6; } if test "$ac_cv_pam" = yes ; then have_pam=yes - printf "%s\n" "#define HAVE_PAM 1" >>confdefs.h + $as_echo "#define HAVE_PAM 1" >>confdefs.h - printf "%s\n" "#define PAM_SERVICE_NAME \"$pam_service_name\"" >>confdefs.h + cat >>confdefs.h <<_ACEOF +#define PAM_SERVICE_NAME "$pam_service_name" +_ACEOF PASSWD_LIBS="${PASSWD_LIBS} -lpam" # libpam typically requires dlopen and dlsym. On FreeBSD, # those are in libc. On Linux and Solaris, they're in libdl. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -printf %s "checking for dlopen in -ldl... " >&6; } -if test ${ac_cv_lib_dl_dlopen+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -11659,40 +12790,40 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char dlopen (); int -main (void) +main () { return dlopen (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes -else $as_nop +else ac_cv_lib_dl_dlopen=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : PASSWD_LIBS="${PASSWD_LIBS} -ldl" fi # On Linux, sigtimedwait() is in libc; on Solaris, it's in librt. have_timedwait=no - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sigtimedwait in -lc" >&5 -printf %s "checking for sigtimedwait in -lc... " >&6; } -if test ${ac_cv_lib_c_sigtimedwait+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sigtimedwait in -lc" >&5 +$as_echo_n "checking for sigtimedwait in -lc... " >&6; } +if ${ac_cv_lib_c_sigtimedwait+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -11701,41 +12832,41 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char sigtimedwait (); int -main (void) +main () { return sigtimedwait (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_sigtimedwait=yes -else $as_nop +else ac_cv_lib_c_sigtimedwait=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_sigtimedwait" >&5 -printf "%s\n" "$ac_cv_lib_c_sigtimedwait" >&6; } -if test "x$ac_cv_lib_c_sigtimedwait" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_sigtimedwait" >&5 +$as_echo "$ac_cv_lib_c_sigtimedwait" >&6; } +if test "x$ac_cv_lib_c_sigtimedwait" = xyes; then : have_timedwait=yes - printf "%s\n" "#define HAVE_SIGTIMEDWAIT 1" >>confdefs.h + $as_echo "#define HAVE_SIGTIMEDWAIT 1" >>confdefs.h fi if test "$have_timedwait" = no ; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sigtimedwait in -lrt" >&5 -printf %s "checking for sigtimedwait in -lrt... " >&6; } -if test ${ac_cv_lib_rt_sigtimedwait+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sigtimedwait in -lrt" >&5 +$as_echo_n "checking for sigtimedwait in -lrt... " >&6; } +if ${ac_cv_lib_rt_sigtimedwait+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lrt $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -11744,43 +12875,43 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char sigtimedwait (); int -main (void) +main () { return sigtimedwait (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_rt_sigtimedwait=yes -else $as_nop +else ac_cv_lib_rt_sigtimedwait=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_sigtimedwait" >&5 -printf "%s\n" "$ac_cv_lib_rt_sigtimedwait" >&6; } -if test "x$ac_cv_lib_rt_sigtimedwait" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_sigtimedwait" >&5 +$as_echo "$ac_cv_lib_rt_sigtimedwait" >&6; } +if test "x$ac_cv_lib_rt_sigtimedwait" = xyes; then : have_timedwait=yes - printf "%s\n" "#define HAVE_SIGTIMEDWAIT 1" >>confdefs.h + $as_echo "#define HAVE_SIGTIMEDWAIT 1" >>confdefs.h PASSWD_LIBS="${PASSWD_LIBS} -lrt" fi fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to call pam_strerror" >&5 -printf %s "checking how to call pam_strerror... " >&6; } - if test ${ac_cv_pam_strerror_args+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to call pam_strerror" >&5 +$as_echo_n "checking how to call pam_strerror... " >&6; } + if ${ac_cv_pam_strerror_args+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then @@ -11794,7 +12925,7 @@ else $as_nop #include #include int -main (void) +main () { pam_handle_t *pamh = 0; char *s = pam_strerror(pamh, PAM_SUCCESS); @@ -11802,10 +12933,9 @@ pam_handle_t *pamh = 0; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_pam_strerror_args=2 -else $as_nop +else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then @@ -11819,7 +12949,7 @@ else $as_nop #include #include int -main (void) +main () { char *s = pam_strerror(PAM_SUCCESS); @@ -11827,48 +12957,46 @@ char *s = return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_pam_strerror_args=1 -else $as_nop +else ac_pam_strerror_args=0 fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" ac_cv_pam_strerror_args=$ac_pam_strerror_args fi ac_pam_strerror_args=$ac_cv_pam_strerror_args if test "$ac_pam_strerror_args" = 1 ; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: one argument" >&5 -printf "%s\n" "one argument" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: one argument" >&5 +$as_echo "one argument" >&6; } elif test "$ac_pam_strerror_args" = 2 ; then - printf "%s\n" "#define PAM_STRERROR_TWO_ARGS 1" >>confdefs.h + $as_echo "#define PAM_STRERROR_TWO_ARGS 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: two arguments" >&5 -printf "%s\n" "two arguments" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: two arguments" >&5 +$as_echo "two arguments" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unknown" >&5 -printf "%s\n" "unknown" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5 +$as_echo "unknown" >&6; } fi # Check pam_fail_delay - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pam_fail_delay in -lpam" >&5 -printf %s "checking pam_fail_delay in -lpam... " >&6; } - if test ${ac_cv_pam_fail_delay+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pam_fail_delay in -lpam" >&5 +$as_echo_n "checking pam_fail_delay in -lpam... " >&6; } + if ${ac_cv_pam_fail_delay+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_save_LDFLAGS="$LDFLAGS" LDFLAGS="-lpam" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { pam_handle_t *pamh = 0; unsigned int usec = 1; @@ -11877,26 +13005,25 @@ pam_handle_t *pamh = 0; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_pam_fail_delay=yes -else $as_nop +else ac_pam_fail_delay=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_cv_pam_fail_delay=$ac_pam_fail_delay, LDFLAGS=$ac_save_LDFLAGS fi if test "$ac_pam_fail_delay" = yes ; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - printf "%s\n" "#define HAVE_PAM_FAIL_DELAY 1" >>confdefs.h + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + $as_echo "#define HAVE_PAM_FAIL_DELAY 1" >>confdefs.h else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi fi @@ -11913,10 +13040,9 @@ have_kerberos5=no with_kerberos_req=unspecified # Check whether --with-kerberos was given. -if test ${with_kerberos+y} -then : +if test "${with_kerberos+set}" = set; then : withval=$with_kerberos; with_kerberos="$withval"; with_kerberos_req="$withval" -else $as_nop +else with_kerberos=yes fi @@ -11925,28 +13051,28 @@ fi no) ;; /*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Kerberos headers" >&5 -printf %s "checking for Kerberos headers... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Kerberos headers" >&5 +$as_echo_n "checking for Kerberos headers... " >&6; } d=$with_kerberos/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Kerberos libs" >&5 -printf %s "checking for Kerberos libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Kerberos libs" >&5 +$as_echo_n "checking for Kerberos libs... " >&6; } d=$with_kerberos/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". @@ -11964,12 +13090,11 @@ printf "%s\n" "not found ($d: no such directory)" >&6; } esac if test "$enable_locking" = yes -a "$with_kerberos" = yes; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Kerberos 4" >&5 -printf %s "checking for Kerberos 4... " >&6; } -if test ${ac_cv_kerberos+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Kerberos 4" >&5 +$as_echo_n "checking for Kerberos 4... " >&6; } +if ${ac_cv_kerberos+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then @@ -11981,30 +13106,28 @@ else $as_nop /* end confdefs.h. */ #include int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_kerberos=yes -else $as_nop +else ac_cv_kerberos=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_kerberos" >&5 -printf "%s\n" "$ac_cv_kerberos" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Kerberos 5" >&5 -printf %s "checking for Kerberos 5... " >&6; } -if test ${ac_cv_kerberos5+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_kerberos" >&5 +$as_echo "$ac_cv_kerberos" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Kerberos 5" >&5 +$as_echo_n "checking for Kerberos 5... " >&6; } +if ${ac_cv_kerberos5+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then @@ -12016,28 +13139,27 @@ else $as_nop /* end confdefs.h. */ #include int -main (void) +main () { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_kerberos5=yes -else $as_nop +else ac_cv_kerberos5=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_kerberos5" >&5 -printf "%s\n" "$ac_cv_kerberos5" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_kerberos5" >&5 +$as_echo "$ac_cv_kerberos5" >&6; } if test "$ac_cv_kerberos" = yes ; then have_kerberos=yes - printf "%s\n" "#define HAVE_KERBEROS 1" >>confdefs.h + $as_echo "#define HAVE_KERBEROS 1" >>confdefs.h fi @@ -12072,12 +13194,11 @@ printf "%s\n" "$ac_cv_kerberos5" >&6; } CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for krb_get_tf_realm in -lkrb4" >&5 -printf %s "checking for krb_get_tf_realm in -lkrb4... " >&6; } -if test ${ac_cv_lib_krb4_krb_get_tf_realm+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for krb_get_tf_realm in -lkrb4" >&5 +$as_echo_n "checking for krb_get_tf_realm in -lkrb4... " >&6; } +if ${ac_cv_lib_krb4_krb_get_tf_realm+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lkrb4 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12086,31 +13207,32 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char krb_get_tf_realm (); int -main (void) +main () { return krb_get_tf_realm (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_krb4_krb_get_tf_realm=yes -else $as_nop +else ac_cv_lib_krb4_krb_get_tf_realm=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_krb4_krb_get_tf_realm" >&5 -printf "%s\n" "$ac_cv_lib_krb4_krb_get_tf_realm" >&6; } -if test "x$ac_cv_lib_krb4_krb_get_tf_realm" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_krb4_krb_get_tf_realm" >&5 +$as_echo "$ac_cv_lib_krb4_krb_get_tf_realm" >&6; } +if test "x$ac_cv_lib_krb4_krb_get_tf_realm" = xyes; then : have_kerberos=yes -else $as_nop +else have_kerberos=no fi @@ -12120,14 +13242,14 @@ fi if test "$have_kerberos" = yes ; then have_kerberos5=yes - printf "%s\n" "#define HAVE_KERBEROS 1" >>confdefs.h + $as_echo "#define HAVE_KERBEROS 1" >>confdefs.h - printf "%s\n" "#define HAVE_KERBEROS5 1" >>confdefs.h + $as_echo "#define HAVE_KERBEROS5 1" >>confdefs.h else have_kerberos5=no - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find compat lib (libkrb4) needed to use Kerberos 5" >&5 -printf "%s\n" "$as_me: WARNING: Cannot find compat lib (libkrb4) needed to use Kerberos 5" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find compat lib (libkrb4) needed to use Kerberos 5" >&5 +$as_echo "$as_me: WARNING: Cannot find compat lib (libkrb4) needed to use Kerberos 5" >&2;} fi fi @@ -12158,12 +13280,11 @@ printf "%s\n" "$as_me: WARNING: Cannot find compat lib (libkrb4) needed to use K CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for crypt in -lcrypt" >&5 -printf %s "checking for crypt in -lcrypt... " >&6; } -if test ${ac_cv_lib_crypt_crypt+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for crypt in -lcrypt" >&5 +$as_echo_n "checking for crypt in -lcrypt... " >&6; } +if ${ac_cv_lib_crypt_crypt+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lcrypt $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12172,29 +13293,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char crypt (); int -main (void) +main () { return crypt (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_crypt_crypt=yes -else $as_nop +else ac_cv_lib_crypt_crypt=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypt_crypt" >&5 -printf "%s\n" "$ac_cv_lib_crypt_crypt" >&6; } -if test "x$ac_cv_lib_crypt_crypt" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypt_crypt" >&5 +$as_echo "$ac_cv_lib_crypt_crypt" >&6; } +if test "x$ac_cv_lib_crypt_crypt" = xyes; then : PASSWD_LIBS="$PASSWD_LIBS -lcrypt" fi @@ -12209,16 +13331,14 @@ fi if test "$have_kerberos" = yes ; then ac_fn_c_check_func "$LINENO" "res_search" "ac_cv_func_res_search" -if test "x$ac_cv_func_res_search" = xyes -then : - -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for res_search in -lresolv" >&5 -printf %s "checking for res_search in -lresolv... " >&6; } -if test ${ac_cv_lib_resolv_res_search+y} -then : - printf %s "(cached) " >&6 -else $as_nop +if test "x$ac_cv_func_res_search" = xyes; then : + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for res_search in -lresolv" >&5 +$as_echo_n "checking for res_search in -lresolv... " >&6; } +if ${ac_cv_lib_resolv_res_search+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lresolv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12227,33 +13347,34 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char res_search (); int -main (void) +main () { return res_search (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_resolv_res_search=yes -else $as_nop +else ac_cv_lib_resolv_res_search=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_resolv_res_search" >&5 -printf "%s\n" "$ac_cv_lib_resolv_res_search" >&6; } -if test "x$ac_cv_lib_resolv_res_search" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_resolv_res_search" >&5 +$as_echo "$ac_cv_lib_resolv_res_search" >&6; } +if test "x$ac_cv_lib_resolv_res_search" = xyes; then : PASSWD_LIBS="${PASSWD_LIBS} -lresolv" -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Can't find DNS resolver libraries needed for Kerberos" >&5 -printf "%s\n" "$as_me: WARNING: Can't find DNS resolver libraries needed for Kerberos" >&2;} +else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Can't find DNS resolver libraries needed for Kerberos" >&5 +$as_echo "$as_me: WARNING: Can't find DNS resolver libraries needed for Kerberos" >&2;} fi @@ -12272,10 +13393,9 @@ have_shadow=no with_shadow_req=unspecified # Check whether --with-shadow was given. -if test ${with_shadow+y} -then : +if test "${with_shadow+set}" = set; then : withval=$with_shadow; with_shadow="$withval"; with_shadow_req="$withval" -else $as_nop +else with_shadow=yes fi @@ -12284,28 +13404,28 @@ fi no) ;; /*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shadow password headers" >&5 -printf %s "checking for shadow password headers... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shadow password headers" >&5 +$as_echo_n "checking for shadow password headers... " >&6; } d=$with_shadow/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shadow password libs" >&5 -printf %s "checking for shadow password libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shadow password libs" >&5 +$as_echo_n "checking for shadow password libs... " >&6; } d=$with_shadow/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". @@ -12334,12 +13454,11 @@ fi ############################################################################### if test "$with_shadow" = yes ; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Sun-style shadow passwords" >&5 -printf %s "checking for Sun-style shadow passwords... " >&6; } -if test ${ac_cv_sun_adjunct+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Sun-style shadow passwords" >&5 +$as_echo_n "checking for Sun-style shadow passwords... " >&6; } +if ${ac_cv_sun_adjunct+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then @@ -12356,7 +13475,7 @@ else $as_nop #include #include int -main (void) +main () { struct passwd_adjunct *p = getpwanam("nobody"); const char *pw = p->pwa_passwd; @@ -12364,17 +13483,16 @@ struct passwd_adjunct *p = getpwanam("nobody"); return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sun_adjunct=yes -else $as_nop +else ac_cv_sun_adjunct=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sun_adjunct" >&5 -printf "%s\n" "$ac_cv_sun_adjunct" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sun_adjunct" >&5 +$as_echo "$ac_cv_sun_adjunct" >&6; } if test "$ac_cv_sun_adjunct" = yes; then have_shadow_adjunct=yes have_shadow=yes @@ -12389,12 +13507,11 @@ fi ############################################################################### if test "$with_shadow" = yes ; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for DEC-style shadow passwords" >&5 -printf %s "checking for DEC-style shadow passwords... " >&6; } -if test ${ac_cv_enhanced_passwd+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DEC-style shadow passwords" >&5 +$as_echo_n "checking for DEC-style shadow passwords... " >&6; } +if ${ac_cv_enhanced_passwd+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then @@ -12411,7 +13528,7 @@ else $as_nop #include #include int -main (void) +main () { struct pr_passwd *p; const char *pw; @@ -12423,17 +13540,16 @@ struct pr_passwd *p; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_enhanced_passwd=yes -else $as_nop +else ac_cv_enhanced_passwd=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enhanced_passwd" >&5 -printf "%s\n" "$ac_cv_enhanced_passwd" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enhanced_passwd" >&5 +$as_echo "$ac_cv_enhanced_passwd" >&6; } if test $ac_cv_enhanced_passwd = yes; then have_shadow_enhanced=yes have_shadow=yes @@ -12443,12 +13559,11 @@ printf "%s\n" "$ac_cv_enhanced_passwd" >&6; } # (I'm told it needs -lcurses too, but I don't understand why.) # But on DEC, it's in -lsecurity. # - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getprpwnam in -lprot" >&5 -printf %s "checking for getprpwnam in -lprot... " >&6; } -if test ${ac_cv_lib_prot_getprpwnam+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getprpwnam in -lprot" >&5 +$as_echo_n "checking for getprpwnam in -lprot... " >&6; } +if ${ac_cv_lib_prot_getprpwnam+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lprot -lx $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12457,37 +13572,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char getprpwnam (); int -main (void) +main () { return getprpwnam (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_prot_getprpwnam=yes -else $as_nop +else ac_cv_lib_prot_getprpwnam=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_prot_getprpwnam" >&5 -printf "%s\n" "$ac_cv_lib_prot_getprpwnam" >&6; } -if test "x$ac_cv_lib_prot_getprpwnam" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_prot_getprpwnam" >&5 +$as_echo "$ac_cv_lib_prot_getprpwnam" >&6; } +if test "x$ac_cv_lib_prot_getprpwnam" = xyes; then : PASSWD_LIBS="$PASSWD_LIBS -lprot -lcurses -lx" -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getprpwnam in -lsecurity" >&5 -printf %s "checking for getprpwnam in -lsecurity... " >&6; } -if test ${ac_cv_lib_security_getprpwnam+y} -then : - printf %s "(cached) " >&6 -else $as_nop +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getprpwnam in -lsecurity" >&5 +$as_echo_n "checking for getprpwnam in -lsecurity... " >&6; } +if ${ac_cv_lib_security_getprpwnam+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lsecurity $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12496,29 +13611,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char getprpwnam (); int -main (void) +main () { return getprpwnam (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_security_getprpwnam=yes -else $as_nop +else ac_cv_lib_security_getprpwnam=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_security_getprpwnam" >&5 -printf "%s\n" "$ac_cv_lib_security_getprpwnam" >&6; } -if test "x$ac_cv_lib_security_getprpwnam" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_security_getprpwnam" >&5 +$as_echo "$ac_cv_lib_security_getprpwnam" >&6; } +if test "x$ac_cv_lib_security_getprpwnam" = xyes; then : PASSWD_LIBS="$PASSWD_LIBS -lsecurity" fi @@ -12534,12 +13650,11 @@ fi ############################################################################### if test "$with_shadow" = yes ; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for HP-style shadow passwords" >&5 -printf %s "checking for HP-style shadow passwords... " >&6; } -if test ${ac_cv_hpux_passwd+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for HP-style shadow passwords" >&5 +$as_echo_n "checking for HP-style shadow passwords... " >&6; } +if ${ac_cv_hpux_passwd+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then @@ -12556,7 +13671,7 @@ else $as_nop #include #include int -main (void) +main () { struct s_passwd *p = getspwnam("nobody"); const char *pw = p->pw_passwd; @@ -12564,29 +13679,27 @@ struct s_passwd *p = getspwnam("nobody"); return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_hpux_passwd=yes -else $as_nop +else ac_cv_hpux_passwd=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_hpux_passwd" >&5 -printf "%s\n" "$ac_cv_hpux_passwd" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_hpux_passwd" >&5 +$as_echo "$ac_cv_hpux_passwd" >&6; } if test "$ac_cv_hpux_passwd" = yes; then have_shadow_hpux=yes have_shadow=yes setuid_auth=yes # on HPUX, bigcrypt is in -lsec - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for bigcrypt in -lsec" >&5 -printf %s "checking for bigcrypt in -lsec... " >&6; } -if test ${ac_cv_lib_sec_bigcrypt+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bigcrypt in -lsec" >&5 +$as_echo_n "checking for bigcrypt in -lsec... " >&6; } +if ${ac_cv_lib_sec_bigcrypt+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lsec $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12595,29 +13708,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char bigcrypt (); int -main (void) +main () { return bigcrypt (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_sec_bigcrypt=yes -else $as_nop +else ac_cv_lib_sec_bigcrypt=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sec_bigcrypt" >&5 -printf "%s\n" "$ac_cv_lib_sec_bigcrypt" >&6; } -if test "x$ac_cv_lib_sec_bigcrypt" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sec_bigcrypt" >&5 +$as_echo "$ac_cv_lib_sec_bigcrypt" >&6; } +if test "x$ac_cv_lib_sec_bigcrypt" = xyes; then : PASSWD_LIBS="$PASSWD_LIBS -lsec" fi @@ -12637,20 +13751,19 @@ fi ############################################################################### if test "$with_shadow" = yes ; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for FreeBSD-style shadow passwords" >&5 -printf %s "checking for FreeBSD-style shadow passwords... " >&6; } -if test ${ac_cv_master_passwd+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FreeBSD-style shadow passwords" >&5 +$as_echo_n "checking for FreeBSD-style shadow passwords... " >&6; } +if ${ac_cv_master_passwd+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -f /etc/master.passwd ; then ac_cv_master_passwd=yes else ac_cv_master_passwd=no fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_master_passwd" >&5 -printf "%s\n" "$ac_cv_master_passwd" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_master_passwd" >&5 +$as_echo "$ac_cv_master_passwd" >&6; } if test "$ac_cv_master_passwd" = yes; then setuid_auth=yes fi @@ -12664,12 +13777,11 @@ fi ############################################################################### if test "$with_shadow" = yes ; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for OpenBSD-style shadow passwords" >&5 -printf %s "checking for OpenBSD-style shadow passwords... " >&6; } -if test ${ac_cv_pwnam_shadow+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenBSD-style shadow passwords" >&5 +$as_echo_n "checking for OpenBSD-style shadow passwords... " >&6; } +if ${ac_cv_pwnam_shadow+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then @@ -12684,7 +13796,7 @@ else $as_nop #include #include int -main (void) +main () { struct spwd *p = getspnam_shadow("nobody"); const char *pw = p->pw_passwd; @@ -12692,17 +13804,16 @@ struct spwd *p = getspnam_shadow("nobody"); return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_pwnam_shadow=yes -else $as_nop +else ac_cv_pwnam_shadow=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_pwnam_shadow" >&5 -printf "%s\n" "$ac_cv_pwnam_shadow" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_pwnam_shadow" >&5 +$as_echo "$ac_cv_pwnam_shadow" >&6; } if test "$ac_cv_pwnam_shadow" = yes; then have_pwnam_shadow=yes @@ -12720,12 +13831,11 @@ fi ############################################################################### if test "$with_shadow" = yes ; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for generic shadow passwords" >&5 -printf %s "checking for generic shadow passwords... " >&6; } -if test ${ac_cv_shadow+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for generic shadow passwords" >&5 +$as_echo_n "checking for generic shadow passwords... " >&6; } +if ${ac_cv_shadow+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then @@ -12741,7 +13851,7 @@ else $as_nop #include #include int -main (void) +main () { struct spwd *p = getspnam("nobody"); const char *pw = p->sp_pwdp; @@ -12749,17 +13859,16 @@ struct spwd *p = getspnam("nobody"); return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_shadow=yes -else $as_nop +else ac_cv_shadow=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_shadow" >&5 -printf "%s\n" "$ac_cv_shadow" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_shadow" >&5 +$as_echo "$ac_cv_shadow" >&6; } if test "$ac_cv_shadow" = yes; then have_shadow=yes @@ -12770,12 +13879,11 @@ printf "%s\n" "$ac_cv_shadow" >&6; } # On some systems (UnixWare 2.1), getspnam() is in -lgen instead of -lc. have_getspnam=no - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getspnam in -lc" >&5 -printf %s "checking for getspnam in -lc... " >&6; } -if test ${ac_cv_lib_c_getspnam+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getspnam in -lc" >&5 +$as_echo_n "checking for getspnam in -lc... " >&6; } +if ${ac_cv_lib_c_getspnam+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12784,39 +13892,39 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char getspnam (); int -main (void) +main () { return getspnam (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_getspnam=yes -else $as_nop +else ac_cv_lib_c_getspnam=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_getspnam" >&5 -printf "%s\n" "$ac_cv_lib_c_getspnam" >&6; } -if test "x$ac_cv_lib_c_getspnam" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_getspnam" >&5 +$as_echo "$ac_cv_lib_c_getspnam" >&6; } +if test "x$ac_cv_lib_c_getspnam" = xyes; then : have_getspnam=yes fi if test "$have_getspnam" = no ; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getspnam in -lgen" >&5 -printf %s "checking for getspnam in -lgen... " >&6; } -if test ${ac_cv_lib_gen_getspnam+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getspnam in -lgen" >&5 +$as_echo_n "checking for getspnam in -lgen... " >&6; } +if ${ac_cv_lib_gen_getspnam+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lgen $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12825,29 +13933,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char getspnam (); int -main (void) +main () { return getspnam (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gen_getspnam=yes -else $as_nop +else ac_cv_lib_gen_getspnam=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gen_getspnam" >&5 -printf "%s\n" "$ac_cv_lib_gen_getspnam" >&6; } -if test "x$ac_cv_lib_gen_getspnam" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gen_getspnam" >&5 +$as_echo "$ac_cv_lib_gen_getspnam" >&6; } +if test "x$ac_cv_lib_gen_getspnam" = xyes; then : have_getspnam=yes; PASSWD_LIBS="$PASSWD_LIBS -lgen" fi @@ -12865,12 +13974,11 @@ if test "$enable_locking" = yes ; then # On some systems (UnixWare 2.1), crypt() is in -lcrypt instead of -lc. have_crypt=no - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for crypt in -lc" >&5 -printf %s "checking for crypt in -lc... " >&6; } -if test ${ac_cv_lib_c_crypt+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for crypt in -lc" >&5 +$as_echo_n "checking for crypt in -lc... " >&6; } +if ${ac_cv_lib_c_crypt+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12879,39 +13987,39 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char crypt (); int -main (void) +main () { return crypt (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_crypt=yes -else $as_nop +else ac_cv_lib_c_crypt=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_crypt" >&5 -printf "%s\n" "$ac_cv_lib_c_crypt" >&6; } -if test "x$ac_cv_lib_c_crypt" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_crypt" >&5 +$as_echo "$ac_cv_lib_c_crypt" >&6; } +if test "x$ac_cv_lib_c_crypt" = xyes; then : have_crypt=yes fi if test "$have_crypt" = no ; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for crypt in -lcrypt" >&5 -printf %s "checking for crypt in -lcrypt... " >&6; } -if test ${ac_cv_lib_crypt_crypt+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for crypt in -lcrypt" >&5 +$as_echo_n "checking for crypt in -lcrypt... " >&6; } +if ${ac_cv_lib_crypt_crypt+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lcrypt $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -12920,74 +14028,36 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char crypt (); int -main (void) +main () { return crypt (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_crypt_crypt=yes -else $as_nop +else ac_cv_lib_crypt_crypt=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypt_crypt" >&5 -printf "%s\n" "$ac_cv_lib_crypt_crypt" >&6; } -if test "x$ac_cv_lib_crypt_crypt" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypt_crypt" >&5 +$as_echo "$ac_cv_lib_crypt_crypt" >&6; } +if test "x$ac_cv_lib_crypt_crypt" = xyes; then : have_crypt=yes; PASSWD_LIBS="$PASSWD_LIBS -lcrypt" fi fi fi -############################################################################### -# -# Strongly suspect that this hasn't been used in years. Also, the same -# goal is achieved by xscreensaver-auth in XScreenSaver 6. -- jwz, 2021 -# -# Check for external password helper -# On SuSE in 1993, instead of having xscreensaver be a setuid program, -# they fork an external program that takes the password on stdin, and -# returns true if that password is a valid one. Then only that smaller -# program needs to be setuid. -# -# (Note that this external program is not a GUI: the GUI is still -# all in xscreensaver itself; the external program just does auth.) -# -############################################################################### - -#have_passwd_helper=no -#with_passwd_helper_req=unspecified -# -#AC_ARG_WITH(passwd-helper, -#[ --with-passwd-helper Include support for external password verification.], -# [with_passwd_helper="$withval"; with_passwd_helper_req="$withval"],[with_passwd_helper=no]) -## no HANDLE_X_PATH_ARG for this one -# -#if test "$enable_locking" = no ; then -# with_passwd_helper_req=no -# with_passwd_helper=no -#fi -# -#case "$with_passwd_helper" in -# ""|no) : ;; -# /*) -# AC_DEFINE_UNQUOTED(PASSWD_HELPER_PROGRAM, "$with_passwd_helper") -# have_passwd_helper=yes;; -# *) -# echo "error: --with-passwd-helper needs full pathname of helper (not '$with_passwd_helper')." >&2 -# exit 1 -#esac - # Most of the above shadow mechanisms will have set setuid_auth to yes, # if they were found. But, on some systems, we need setuid even when # using plain old vanilla passwords. @@ -13001,19 +14071,19 @@ if test "$enable_locking" = yes -a "$have_pam" = no ; then fi if test "$have_shadow_adjunct" = yes ; then - printf "%s\n" "#define HAVE_ADJUNCT_PASSWD 1" >>confdefs.h + $as_echo "#define HAVE_ADJUNCT_PASSWD 1" >>confdefs.h elif test "$have_shadow_enhanced" = yes ; then - printf "%s\n" "#define HAVE_ENHANCED_PASSWD 1" >>confdefs.h + $as_echo "#define HAVE_ENHANCED_PASSWD 1" >>confdefs.h elif test "$have_shadow_hpux" = yes ; then - printf "%s\n" "#define HAVE_HPUX_PASSWD 1" >>confdefs.h + $as_echo "#define HAVE_HPUX_PASSWD 1" >>confdefs.h elif test "$have_shadow" = yes ; then - printf "%s\n" "#define HAVE_SHADOW_PASSWD 1" >>confdefs.h + $as_echo "#define HAVE_SHADOW_PASSWD 1" >>confdefs.h elif test "$have_pwnam_shadow" = yes ; then - printf "%s\n" "#define HAVE_PWNAM_SHADOW_PASSWD 1" >>confdefs.h + $as_echo "#define HAVE_PWNAM_SHADOW_PASSWD 1" >>confdefs.h fi @@ -13029,10 +14099,9 @@ have_gtk=no with_gtk_req=unspecified # Check whether --with-gtk was given. -if test ${with_gtk+y} -then : +if test "${with_gtk+set}" = set; then : withval=$with_gtk; with_gtk="$withval"; with_gtk_req="$withval" -else $as_nop +else with_gtk=yes fi @@ -13052,28 +14121,28 @@ esac no) ;; /*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Gtk headers" >&5 -printf %s "checking for Gtk headers... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Gtk headers" >&5 +$as_echo_n "checking for Gtk headers... " >&6; } d=$with_gtk/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Gtk libs" >&5 -printf %s "checking for Gtk libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Gtk libs" >&5 +$as_echo_n "checking for Gtk libs... " >&6; } d=$with_gtk/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". @@ -13116,26 +14185,24 @@ if test "$with_gtk" = yes; then fi if test "$have_gtk" = yes; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Gtk includes" >&5 -printf %s "checking for Gtk includes... " >&6; } -if test ${ac_cv_gtk_config_cflags+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Gtk includes" >&5 +$as_echo_n "checking for Gtk includes... " >&6; } +if ${ac_cv_gtk_config_cflags+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_cv_gtk_config_cflags=`$pkg_config --cflags $pkgs` fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gtk_config_cflags" >&5 -printf "%s\n" "$ac_cv_gtk_config_cflags" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Gtk libs" >&5 -printf %s "checking for Gtk libs... " >&6; } -if test ${ac_cv_gtk_config_libs+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gtk_config_cflags" >&5 +$as_echo "$ac_cv_gtk_config_cflags" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Gtk libs" >&5 +$as_echo_n "checking for Gtk libs... " >&6; } +if ${ac_cv_gtk_config_libs+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_cv_gtk_config_libs=`$pkg_config --libs $pkgs` fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gtk_config_libs" >&5 -printf "%s\n" "$ac_cv_gtk_config_libs" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gtk_config_libs" >&5 +$as_echo "$ac_cv_gtk_config_libs" >&6; } fi ac_gtk_config_cflags=$ac_cv_gtk_config_cflags @@ -13150,11 +14217,11 @@ printf "%s\n" "$ac_cv_gtk_config_libs" >&6; } if test "$have_gtk" = yes; then INCLUDES="$INCLUDES $ac_gtk_config_cflags" GTK_LIBS="$GTK_LIBS $ac_gtk_config_libs" - printf "%s\n" "#define HAVE_GTK 1" >>confdefs.h + $as_echo "#define HAVE_GTK 1" >>confdefs.h - printf "%s\n" "#define HAVE_GTK2 1" >>confdefs.h + $as_echo "#define HAVE_GTK2 1" >>confdefs.h - printf "%s\n" "#define HAVE_XML 1" >>confdefs.h + $as_echo "#define HAVE_XML 1" >>confdefs.h fi fi @@ -13167,12 +14234,11 @@ if test "$have_gtk" = yes; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_gnome_open_program+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_gnome_open_program+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$gnome_open_program"; then ac_cv_prog_gnome_open_program="$gnome_open_program" # Let the user override the test. else @@ -13180,15 +14246,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_gnome_open_program="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -13199,11 +14261,11 @@ fi fi gnome_open_program=$ac_cv_prog_gnome_open_program if test -n "$gnome_open_program"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gnome_open_program" >&5 -printf "%s\n" "$gnome_open_program" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gnome_open_program" >&5 +$as_echo "$gnome_open_program" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi test -n "$gnome_open_program" && break @@ -13213,12 +14275,11 @@ done do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_gnome_url_show_program+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_gnome_url_show_program+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$gnome_url_show_program"; then ac_cv_prog_gnome_url_show_program="$gnome_url_show_program" # Let the user override the test. else @@ -13226,15 +14287,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_gnome_url_show_program="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -13245,11 +14302,11 @@ fi fi gnome_url_show_program=$ac_cv_prog_gnome_url_show_program if test -n "$gnome_url_show_program"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gnome_url_show_program" >&5 -printf "%s\n" "$gnome_url_show_program" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gnome_url_show_program" >&5 +$as_echo "$gnome_url_show_program" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi test -n "$gnome_url_show_program" && break @@ -13267,10 +14324,9 @@ have_motif=no with_motif_req=unspecified # Check whether --with-motif was given. -if test ${with_motif+y} -then : +if test "${with_motif+set}" = set; then : withval=$with_motif; with_motif="$withval"; with_motif_req="$withval" -else $as_nop +else with_motif=no fi @@ -13279,28 +14335,28 @@ fi no) ;; /*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Motif headers" >&5 -printf %s "checking for Motif headers... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Motif headers" >&5 +$as_echo_n "checking for Motif headers... " >&6; } d=$with_motif/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Motif libs" >&5 -printf %s "checking for Motif libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Motif libs" >&5 +$as_echo_n "checking for Motif libs... " >&6; } d=$with_motif/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". @@ -13335,10 +14391,9 @@ if test "$with_motif" = yes; then #include #include " -if test "x$ac_cv_header_Xm_Xm_h" = xyes -then : +if test "x$ac_cv_header_Xm_Xm_h" = xyes; then : have_motif=yes - printf "%s\n" "#define HAVE_MOTIF 1" >>confdefs.h + $as_echo "#define HAVE_MOTIF 1" >>confdefs.h MOTIF_LIBS="$MOTIF_LIBS -lXm" fi @@ -13358,9 +14413,8 @@ if test "$have_motif" = yes; then #include #include " -if test "x$ac_cv_header_Xm_ComboBox_h" = xyes -then : - printf "%s\n" "#define HAVE_XMCOMBOBOX 1" >>confdefs.h +if test "x$ac_cv_header_Xm_ComboBox_h" = xyes; then : + $as_echo "#define HAVE_XMCOMBOBOX 1" >>confdefs.h fi @@ -13375,12 +14429,11 @@ fi have_lesstif=no if test "$have_motif" = yes ; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether Motif is really LessTif" >&5 -printf %s "checking whether Motif is really LessTif... " >&6; } -if test ${ac_cv_have_lesstif+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Motif is really LessTif" >&5 +$as_echo_n "checking whether Motif is really LessTif... " >&6; } +if ${ac_cv_have_lesstif+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then @@ -13392,24 +14445,23 @@ else $as_nop /* end confdefs.h. */ #include int -main (void) +main () { long vers = LesstifVersion; ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" -then : +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_have_lesstif=yes -else $as_nop +else ac_cv_have_lesstif=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CPPFLAGS="$ac_save_CPPFLAGS" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_lesstif" >&5 -printf "%s\n" "$ac_cv_have_lesstif" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_lesstif" >&5 +$as_echo "$ac_cv_have_lesstif" >&6; } have_lesstif=$ac_cv_have_lesstif fi @@ -13419,12 +14471,11 @@ lesstif_version_string=unknown if test "$have_lesstif" = yes ; then ltv=unknown echo unknown > conftest-lt - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking LessTif version number" >&5 -printf %s "checking LessTif version number... " >&6; } -if test ${ac_cv_lesstif_version_string+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking LessTif version number" >&5 +$as_echo_n "checking LessTif version number... " >&6; } +if ${ac_cv_lesstif_version_string+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then @@ -13432,11 +14483,10 @@ else $as_nop fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` - if test "$cross_compiling" = yes -then : + if test "$cross_compiling" = yes; then : ac_cv_lesstif_version=unknown ac_cv_lesstif_version_string=unknown -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -13450,12 +14500,11 @@ else $as_nop exit(0); } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : +if ac_fn_c_try_run "$LINENO"; then : ltv=`cat conftest-lt` ac_cv_lesstif_version=`echo $ltv | sed 's/ .*//'` ac_cv_lesstif_version_string=`echo $ltv | sed 's/.* //'` -else $as_nop +else ac_cv_lesstif_version=unknown ac_cv_lesstif_version_string=unknown fi @@ -13465,8 +14514,8 @@ fi CPPFLAGS="$ac_save_CPPFLAGS" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lesstif_version_string" >&5 -printf "%s\n" "$ac_cv_lesstif_version_string" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lesstif_version_string" >&5 +$as_echo "$ac_cv_lesstif_version_string" >&6; } rm -rf conftest-lt lesstif_version=$ac_cv_lesstif_version lesstif_version_string=$ac_cv_lesstif_version_string @@ -13476,12 +14525,11 @@ fi if test "$have_motif" = yes ; then mtv=unknown echo unknown > conftest-mt - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking Motif version number" >&5 -printf %s "checking Motif version number... " >&6; } -if test ${ac_cv_motif_version_string+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Motif version number" >&5 +$as_echo_n "checking Motif version number... " >&6; } +if ${ac_cv_motif_version_string+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_save_CPPFLAGS="$CPPFLAGS" if test \! -z "$includedir" ; then @@ -13489,11 +14537,10 @@ else $as_nop fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` - if test "$cross_compiling" = yes -then : + if test "$cross_compiling" = yes; then : ac_cv_motif_version=unknown ac_cv_motif_version_string=unknown -else $as_nop +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -13507,12 +14554,11 @@ else $as_nop exit(0); } _ACEOF -if ac_fn_c_try_run "$LINENO" -then : +if ac_fn_c_try_run "$LINENO"; then : mtv=`cat conftest-mt` ac_cv_motif_version=`echo $mtv | sed 's/ .*//'` ac_cv_motif_version_string=`echo $mtv | sed 's/.* //'` -else $as_nop +else ac_cv_motif_version=unknown ac_cv_motif_version_string=unknown fi @@ -13522,8 +14568,8 @@ fi CPPFLAGS="$ac_save_CPPFLAGS" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_motif_version_string" >&5 -printf "%s\n" "$ac_cv_motif_version_string" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_motif_version_string" >&5 +$as_echo "$ac_cv_motif_version_string" >&6; } rm -rf conftest-mt motif_version=$ac_cv_motif_version motif_version_string=$ac_cv_motif_version_string @@ -13562,12 +14608,11 @@ if test "$have_motif" = yes ; then CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XpQueryExtension in -lXp" >&5 -printf %s "checking for XpQueryExtension in -lXp... " >&6; } -if test ${ac_cv_lib_Xp_XpQueryExtension+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XpQueryExtension in -lXp" >&5 +$as_echo_n "checking for XpQueryExtension in -lXp... " >&6; } +if ${ac_cv_lib_Xp_XpQueryExtension+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lXp -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -13576,31 +14621,32 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char XpQueryExtension (); int -main (void) +main () { return XpQueryExtension (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xp_XpQueryExtension=yes -else $as_nop +else ac_cv_lib_Xp_XpQueryExtension=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xp_XpQueryExtension" >&5 -printf "%s\n" "$ac_cv_lib_Xp_XpQueryExtension" >&6; } -if test "x$ac_cv_lib_Xp_XpQueryExtension" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xp_XpQueryExtension" >&5 +$as_echo "$ac_cv_lib_Xp_XpQueryExtension" >&6; } +if test "x$ac_cv_lib_Xp_XpQueryExtension" = xyes; then : have_xp_ext=yes; MOTIF_LIBS="$MOTIF_LIBS -lXp" -else $as_nop +else true fi @@ -13637,12 +14683,11 @@ if test "$have_motif" = yes ; then CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _Xsetlocale in -lXintl" >&5 -printf %s "checking for _Xsetlocale in -lXintl... " >&6; } -if test ${ac_cv_lib_Xintl__Xsetlocale+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _Xsetlocale in -lXintl" >&5 +$as_echo_n "checking for _Xsetlocale in -lXintl... " >&6; } +if ${ac_cv_lib_Xintl__Xsetlocale+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lXintl -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -13651,31 +14696,32 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char _Xsetlocale (); int -main (void) +main () { return _Xsetlocale (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xintl__Xsetlocale=yes -else $as_nop +else ac_cv_lib_Xintl__Xsetlocale=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xintl__Xsetlocale" >&5 -printf "%s\n" "$ac_cv_lib_Xintl__Xsetlocale" >&6; } -if test "x$ac_cv_lib_Xintl__Xsetlocale" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xintl__Xsetlocale" >&5 +$as_echo "$ac_cv_lib_Xintl__Xsetlocale" >&6; } +if test "x$ac_cv_lib_Xintl__Xsetlocale" = xyes; then : have_xintl=yes -else $as_nop +else have_xintl=no fi @@ -13702,10 +14748,9 @@ default_login_manager_3='lxdm -c USER_SWITCH' default_login_manager_4='dm-tool switch-to-greeter' # Check whether --with-login-manager was given. -if test ${with_login_manager+y} -then : +if test "${with_login_manager+set}" = set; then : withval=$with_login_manager; with_login_manager="$withval"; with_login_manager_req="$withval" -else $as_nop +else with_login_manager=yes fi @@ -13731,12 +14776,11 @@ case "$with_login_manager_req" in unset ac_cv_path_login_manager_tmp # don't cache # Extract the first word of "$login_manager_tmp", so it can be a program name with args. set dummy $login_manager_tmp; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_login_manager_tmp+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_login_manager_tmp+:} false; then : + $as_echo_n "(cached) " >&6 +else case $login_manager_tmp in [\\/]* | ?:[\\/]*) ac_cv_path_login_manager_tmp="$login_manager_tmp" # Let the user override the test with a path. @@ -13746,15 +14790,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_login_manager_tmp="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_login_manager_tmp="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -13766,11 +14806,11 @@ esac fi login_manager_tmp=$ac_cv_path_login_manager_tmp if test -n "$login_manager_tmp"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $login_manager_tmp" >&5 -printf "%s\n" "$login_manager_tmp" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $login_manager_tmp" >&5 +$as_echo "$login_manager_tmp" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test ! -z "$login_manager_tmp" ; then @@ -13783,12 +14823,11 @@ fi unset ac_cv_path_login_manager_tmp # don't cache # Extract the first word of "$login_manager_tmp", so it can be a program name with args. set dummy $login_manager_tmp; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_login_manager_tmp+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_login_manager_tmp+:} false; then : + $as_echo_n "(cached) " >&6 +else case $login_manager_tmp in [\\/]* | ?:[\\/]*) ac_cv_path_login_manager_tmp="$login_manager_tmp" # Let the user override the test with a path. @@ -13798,15 +14837,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_login_manager_tmp="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_login_manager_tmp="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -13818,11 +14853,11 @@ esac fi login_manager_tmp=$ac_cv_path_login_manager_tmp if test -n "$login_manager_tmp"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $login_manager_tmp" >&5 -printf "%s\n" "$login_manager_tmp" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $login_manager_tmp" >&5 +$as_echo "$login_manager_tmp" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test ! -z "$login_manager_tmp" ; then @@ -13835,12 +14870,11 @@ fi unset ac_cv_path_login_manager_tmp # don't cache # Extract the first word of "$login_manager_tmp", so it can be a program name with args. set dummy $login_manager_tmp; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_login_manager_tmp+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_login_manager_tmp+:} false; then : + $as_echo_n "(cached) " >&6 +else case $login_manager_tmp in [\\/]* | ?:[\\/]*) ac_cv_path_login_manager_tmp="$login_manager_tmp" # Let the user override the test with a path. @@ -13850,15 +14884,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_login_manager_tmp="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_login_manager_tmp="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -13870,11 +14900,11 @@ esac fi login_manager_tmp=$ac_cv_path_login_manager_tmp if test -n "$login_manager_tmp"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $login_manager_tmp" >&5 -printf "%s\n" "$login_manager_tmp" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $login_manager_tmp" >&5 +$as_echo "$login_manager_tmp" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test ! -z "$login_manager_tmp" ; then @@ -13887,12 +14917,11 @@ fi unset ac_cv_path_login_manager_tmp # don't cache # Extract the first word of "$login_manager_tmp", so it can be a program name with args. set dummy $login_manager_tmp; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_login_manager_tmp+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_login_manager_tmp+:} false; then : + $as_echo_n "(cached) " >&6 +else case $login_manager_tmp in [\\/]* | ?:[\\/]*) ac_cv_path_login_manager_tmp="$login_manager_tmp" # Let the user override the test with a path. @@ -13902,15 +14931,11 @@ else $as_nop for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then - ac_cv_path_login_manager_tmp="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_login_manager_tmp="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -13922,11 +14947,11 @@ esac fi login_manager_tmp=$ac_cv_path_login_manager_tmp if test -n "$login_manager_tmp"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $login_manager_tmp" >&5 -printf "%s\n" "$login_manager_tmp" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $login_manager_tmp" >&5 +$as_echo "$login_manager_tmp" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test ! -z "$login_manager_tmp" ; then @@ -13946,16 +14971,16 @@ ac_cv_login_manager_program="$with_login_manager" NEW_LOGIN_COMMAND_P='' NEW_LOGIN_COMMAND="$ac_cv_login_manager_program" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for login manager" >&5 -printf %s "checking for login manager... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for login manager" >&5 +$as_echo_n "checking for login manager... " >&6; } if test -z "$NEW_LOGIN_COMMAND" ; then NEW_LOGIN_COMMAND="$default_login_manager_1" NEW_LOGIN_COMMAND_P='! ' - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NEW_LOGIN_COMMAND (disabled)" >&5 -printf "%s\n" "$NEW_LOGIN_COMMAND (disabled)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NEW_LOGIN_COMMAND (disabled)" >&5 +$as_echo "$NEW_LOGIN_COMMAND (disabled)" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NEW_LOGIN_COMMAND" >&5 -printf "%s\n" "$NEW_LOGIN_COMMAND" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NEW_LOGIN_COMMAND" >&5 +$as_echo "$NEW_LOGIN_COMMAND" >&6; } fi ############################################################################### @@ -13969,10 +14994,9 @@ have_imagedir=no with_imagedir_req=unspecified # Check whether --with-image-directory was given. -if test ${with_image_directory+y} -then : +if test "${with_image_directory+set}" = set; then : withval=$with_image_directory; with_imagedir="$withval"; with_imagedir_req="$withval" -else $as_nop +else with_imagedir=yes fi @@ -13981,14 +15005,14 @@ fi case "$with_imagedir" in /*) # absolute path - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for image directory $with_imagedir" >&5 -printf %s "checking for image directory $with_imagedir... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for image directory $with_imagedir" >&5 +$as_echo_n "checking for image directory $with_imagedir... " >&6; } if test -d "$with_imagedir" ; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } with_imagedir="" fi ;; @@ -14006,23 +15030,23 @@ printf "%s\n" "no" >&6; } "/Library/Desktop Pictures/" \ ; do if test -z "$with_imagedir"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for image directory $dd" >&5 -printf %s "checking for image directory $dd... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for image directory $dd" >&5 +$as_echo_n "checking for image directory $dd... " >&6; } if test -d "$dd"; then if ( ls "$dd" | grep -q ... ) >&- 2>&- ; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } with_imagedir="$dd" else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: empty" >&5 -printf "%s\n" "empty" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: empty" >&5 +$as_echo "empty" >&6; } if test -z "$fallback_imgdir"; then fallback_imgdir="$dd" fi fi else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi fi done @@ -14060,10 +15084,9 @@ have_textfile=no with_textfile_req=unspecified # Check whether --with-text-file was given. -if test ${with_text_file+y} -then : +if test "${with_text_file+set}" = set; then : withval=$with_text_file; with_textfile="$withval"; with_textfile_req="$withval" -else $as_nop +else with_textfile=yes fi @@ -14072,14 +15095,14 @@ fi case "$with_textfile" in /*) # absolute path - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for text file $with_textfile" >&5 -printf %s "checking for text file $with_textfile... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for text file $with_textfile" >&5 +$as_echo_n "checking for text file $with_textfile... " >&6; } if test -f "$with_textfile" ; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } with_textfile="" fi ;; @@ -14097,16 +15120,16 @@ printf "%s\n" "no" >&6; } "/usr/share/doc/debian/debian-manifesto" \ ; do if test -z "$with_textfile"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for text file $f" >&5 -printf %s "checking for text file $f... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for text file $f" >&5 +$as_echo_n "checking for text file $f... " >&6; } f=`/bin/ls $f 2>&- | head -1` if test -f "$f" ; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } with_textfile="$f" else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi fi done @@ -14135,10 +15158,9 @@ have_browser=no with_browser_req=unspecified # Check whether --with-browser was given. -if test ${with_browser+y} -then : +if test "${with_browser+set}" = set; then : withval=$with_browser; with_browser="$withval"; with_browser_req="$withval" -else $as_nop +else with_browser=no fi @@ -14150,18 +15172,18 @@ case "$with_browser" in * ) WITH_BROWSER=$with_browser gnome_open_program=$with_browser - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for browser $with_browser" >&5 -printf %s "checking for browser $with_browser... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for browser $with_browser" >&5 +$as_echo_n "checking for browser $with_browser... " >&6; } with_browser_fullpath=`which $with_browser 2>/dev/null` case $with_browser_fullpath in /* ) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } have_browser=yes ;; * ) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } # Only warning: we don't want to install all packages for the # dependency of the browser in building stage... echo "WARNING: browser not found: --with-browser=$with_browser" @@ -14274,11 +15296,10 @@ with_pthread_req=unspecified #serial 30 -# This is what autoupdate's m4 run will expand. It fires the warning -# (with _au_warn_XXX), outputs it into the updated configure.ac (with -# m4_warn), and then outputs the replacement expansion. We need extra -# quotation around the m4_warn and dnl so they will be written -# unexpanded into the updated configure.ac. +# This is what autoupdate's m4 run will expand. It fires +# the warning (with _au_warn_XXX), outputs it into the +# updated configure.ac (with AC_DIAGNOSE), and then outputs +# the replacement expansion. # This is an auxiliary macro that is also run when # autoupdate runs m4. It simply calls m4_warning, but @@ -14287,39 +15308,36 @@ with_pthread_req=unspecified # order to expand this macro's arguments, not AU_DEFUN's. # Finally, this is the expansion that is picked up by -# autoconf, causing NAME to expand to NEW-CODE, plus -# (if SILENT is not "silent") a m4_warning telling the -# maintainer to run autoupdate. We don't issue MESSAGE -# from autoconf, because that's instructions for what -# to do *after* running autoupdate. +# autoconf. It tells the user to run autoupdate, and +# then outputs the replacement expansion. We do not care +# about autoupdate's warning because that contains +# information on what to do *after* running autoupdate. # Check whether --with-pthread was given. -if test ${with_pthread+y} -then : +if test "${with_pthread+set}" = set; then : withval=$with_pthread; # This is documented after --with-gl in --with-xft. with_pthread="$withval"; with_pthread_req="$withval" -else $as_nop +else with_pthread=yes fi if test "$with_pthread" = yes; then # AX_PTHREAD might want a different compiler. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 -printf %s "checking target system type... " >&6; } -if test ${ac_cv_target+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 +$as_echo_n "checking target system type... " >&6; } +if ${ac_cv_target+:} false; then : + $as_echo_n "(cached) " >&6 +else if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else - ac_cv_target=`$SHELL "${ac_aux_dir}config.sub" $target_alias` || - as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $target_alias failed" "$LINENO" 5 + ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 -printf "%s\n" "$ac_cv_target" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 +$as_echo "$ac_cv_target" >&6; } case $ac_cv_target in *-*-*) ;; *) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; @@ -14330,93 +15348,19 @@ set x $ac_cv_target shift target_cpu=$1 target_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -target_os=$* -IFS=$ac_save_IFS -case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac - -# The aliases save the names the user supplied, while $host etc. -# will get canonicalized. -test -n "$target_alias" && - test "$program_prefix$program_suffix$program_transform_name" = \ - NONENONEs,x,x, && - program_prefix=${target_alias}- -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -printf %s "checking for a sed that does not truncate output... " >&6; } -if test ${ac_cv_path_SED+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in sed gsed - do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_SED" || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - printf %s 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - printf "%s\n" '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -rf conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +target_os=$* +IFS=$ac_save_IFS +case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -printf "%s\n" "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -rf conftest.sed +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +test -n "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -14437,41 +15381,41 @@ if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then ax_pthread_save_CC="$CC" ax_pthread_save_CFLAGS="$CFLAGS" ax_pthread_save_LIBS="$LIBS" - if test "x$PTHREAD_CC" != "x" -then : + if test "x$PTHREAD_CC" != "x"; then : CC="$PTHREAD_CC" fi - if test "x$PTHREAD_CXX" != "x" -then : + if test "x$PTHREAD_CXX" != "x"; then : CXX="$PTHREAD_CXX" fi CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS" >&5 -printf %s "checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS" >&5 +$as_echo_n "checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char pthread_join (); int -main (void) +main () { return pthread_join (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ax_pthread_ok=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 -printf "%s\n" "$ax_pthread_ok" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 +$as_echo "$ax_pthread_ok" >&6; } if test "x$ax_pthread_ok" = "xno"; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" @@ -14549,10 +15493,9 @@ case $target_os in _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1 -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&5 -printf "%s\n" "$as_me: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&2;} + $EGREP "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&5 +$as_echo "$as_me: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&2;} fi rm -rf conftest* @@ -14574,12 +15517,11 @@ esac # Are we compiling with Clang? -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC is Clang" >&5 -printf %s "checking whether $CC is Clang... " >&6; } -if test ${ax_cv_PTHREAD_CLANG+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC is Clang" >&5 +$as_echo_n "checking whether $CC is Clang... " >&6; } +if ${ax_cv_PTHREAD_CLANG+:} false; then : + $as_echo_n "(cached) " >&6 +else ax_cv_PTHREAD_CLANG=no # Note that Autoconf sets GCC=yes for Clang as well as GCC if test "x$GCC" = "xyes"; then @@ -14592,8 +15534,7 @@ else $as_nop _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1 -then : + $EGREP "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1; then : ax_cv_PTHREAD_CLANG=yes fi rm -rf conftest* @@ -14601,8 +15542,8 @@ rm -rf conftest* fi fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG" >&5 -printf "%s\n" "$ax_cv_PTHREAD_CLANG" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG" >&5 +$as_echo "$ax_cv_PTHREAD_CLANG" >&6; } ax_pthread_clang="$ax_cv_PTHREAD_CLANG" # GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC) @@ -14615,15 +15556,13 @@ ax_pthread_clang="$ax_cv_PTHREAD_CLANG" # [3] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=468555 # To solve this, first try -pthread together with -lpthread for GCC -if test "x$GCC" = "xyes" -then : +if test "x$GCC" = "xyes"; then : ax_pthread_flags="-pthread,-lpthread -pthread -pthreads $ax_pthread_flags" fi # Clang takes -pthread (never supported any other flag), but we'll try with -lpthread first -if test "x$ax_pthread_clang" = "xyes" -then : +if test "x$ax_pthread_clang" = "xyes"; then : ax_pthread_flags="-pthread,-lpthread -pthread" fi @@ -14644,10 +15583,9 @@ case $target_os in ax_pthread_check_macro="--" ;; esac -if test "x$ax_pthread_check_macro" = "x--" -then : +if test "x$ax_pthread_check_macro" = "x--"; then : ax_pthread_check_cond=0 -else $as_nop +else ax_pthread_check_cond="!defined($ax_pthread_check_macro)" fi @@ -14656,32 +15594,31 @@ for ax_pthread_try_flag in $ax_pthread_flags; do case $ax_pthread_try_flag in none) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 -printf %s "checking whether pthreads work without any flags... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 +$as_echo_n "checking whether pthreads work without any flags... " >&6; } ;; *,*) PTHREAD_CFLAGS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\1/"` PTHREAD_LIBS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\2/"` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with \"$PTHREAD_CFLAGS\" and \"$PTHREAD_LIBS\"" >&5 -printf %s "checking whether pthreads work with \"$PTHREAD_CFLAGS\" and \"$PTHREAD_LIBS\"... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with \"$PTHREAD_CFLAGS\" and \"$PTHREAD_LIBS\"" >&5 +$as_echo_n "checking whether pthreads work with \"$PTHREAD_CFLAGS\" and \"$PTHREAD_LIBS\"... " >&6; } ;; -*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $ax_pthread_try_flag" >&5 -printf %s "checking whether pthreads work with $ax_pthread_try_flag... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $ax_pthread_try_flag" >&5 +$as_echo_n "checking whether pthreads work with $ax_pthread_try_flag... " >&6; } PTHREAD_CFLAGS="$ax_pthread_try_flag" ;; pthread-config) # Extract the first word of "pthread-config", so it can be a program name with args. set dummy pthread-config; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ax_pthread_config+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ax_pthread_config+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$ax_pthread_config"; then ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test. else @@ -14689,15 +15626,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ax_pthread_config="yes" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -14709,15 +15642,14 @@ fi fi ax_pthread_config=$ac_cv_prog_ax_pthread_config if test -n "$ax_pthread_config"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5 -printf "%s\n" "$ax_pthread_config" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5 +$as_echo "$ax_pthread_config" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - if test "x$ax_pthread_config" = "xno" -then : + if test "x$ax_pthread_config" = "xno"; then : continue fi PTHREAD_CFLAGS="`pthread-config --cflags`" @@ -14725,8 +15657,8 @@ fi ;; *) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$ax_pthread_try_flag" >&5 -printf %s "checking for the pthreads library -l$ax_pthread_try_flag... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$ax_pthread_try_flag" >&5 +$as_echo_n "checking for the pthreads library -l$ax_pthread_try_flag... " >&6; } PTHREAD_LIBS="-l$ax_pthread_try_flag" ;; esac @@ -14761,7 +15693,7 @@ printf %s "checking for the pthreads library -l$ax_pthread_try_flag... " >&6; } } static void *start_routine(void *a) { return a; } int -main (void) +main () { pthread_t th; pthread_attr_t attr; pthread_create(&th, 0, start_routine, 0); @@ -14773,20 +15705,18 @@ pthread_t th; pthread_attr_t attr; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ax_pthread_ok=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$ax_pthread_save_CFLAGS" LIBS="$ax_pthread_save_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 -printf "%s\n" "$ax_pthread_ok" >&6; } - if test "x$ax_pthread_ok" = "xyes" -then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 +$as_echo "$ax_pthread_ok" >&6; } + if test "x$ax_pthread_ok" = "xyes"; then : break fi @@ -14831,12 +15761,11 @@ if test "x$ax_pthread_clang" = "xyes"; then # that build with -Werror. So if the active version of Clang has # this misfeature, we search for an option to squash it. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread" >&5 -printf %s "checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread... " >&6; } -if test ${ax_cv_PTHREAD_CLANG_NO_WARN_FLAG+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread" >&5 +$as_echo_n "checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread... " >&6; } +if ${ax_cv_PTHREAD_CLANG_NO_WARN_FLAG+:} false; then : + $as_echo_n "(cached) " >&6 +else ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown # Create an alternate version of $ac_link that compiles and # links in two steps (.c -> .o, .o -> exe) instead of one @@ -14844,12 +15773,11 @@ else $as_nop # step ax_pthread_save_ac_link="$ac_link" ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g' - ax_pthread_link_step=`printf "%s\n" "$ac_link" | sed "$ax_pthread_sed"` + ax_pthread_link_step=`$as_echo "$ac_link" | sed "$ax_pthread_sed"` ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)" ax_pthread_save_CFLAGS="$CFLAGS" for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do - if test "x$ax_pthread_try" = "xunknown" -then : + if test "x$ax_pthread_try" = "xunknown"; then : break fi CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS" @@ -14858,35 +15786,32 @@ fi /* end confdefs.h. */ int main(void){return 0;} _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_link="$ax_pthread_2step_ac_link" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main(void){return 0;} _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : break fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done ac_link="$ax_pthread_save_ac_link" CFLAGS="$ax_pthread_save_CFLAGS" - if test "x$ax_pthread_try" = "x" -then : + if test "x$ax_pthread_try" = "x"; then : ax_pthread_try=no fi ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try" fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&5 -printf "%s\n" "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&5 +$as_echo "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&6; } case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in no | unknown) ;; @@ -14903,53 +15828,51 @@ if test "x$ax_pthread_ok" = "xyes"; then LIBS="$PTHREAD_LIBS $LIBS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 -printf %s "checking for joinable pthread attribute... " >&6; } -if test ${ax_cv_PTHREAD_JOINABLE_ATTR+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 +$as_echo_n "checking for joinable pthread attribute... " >&6; } +if ${ax_cv_PTHREAD_JOINABLE_ATTR+:} false; then : + $as_echo_n "(cached) " >&6 +else ax_cv_PTHREAD_JOINABLE_ATTR=unknown for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { int attr = $ax_pthread_attr; return attr /* ; */ ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_JOINABLE_ATTR" >&5 -printf "%s\n" "$ax_cv_PTHREAD_JOINABLE_ATTR" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_JOINABLE_ATTR" >&5 +$as_echo "$ax_cv_PTHREAD_JOINABLE_ATTR" >&6; } if test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \ test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \ - test "x$ax_pthread_joinable_attr_defined" != "xyes" -then : + test "x$ax_pthread_joinable_attr_defined" != "xyes"; then : -printf "%s\n" "#define PTHREAD_CREATE_JOINABLE $ax_cv_PTHREAD_JOINABLE_ATTR" >>confdefs.h +cat >>confdefs.h <<_ACEOF +#define PTHREAD_CREATE_JOINABLE $ax_cv_PTHREAD_JOINABLE_ATTR +_ACEOF ax_pthread_joinable_attr_defined=yes fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether more special flags are required for pthreads" >&5 -printf %s "checking whether more special flags are required for pthreads... " >&6; } -if test ${ax_cv_PTHREAD_SPECIAL_FLAGS+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether more special flags are required for pthreads" >&5 +$as_echo_n "checking whether more special flags are required for pthreads... " >&6; } +if ${ax_cv_PTHREAD_SPECIAL_FLAGS+:} false; then : + $as_echo_n "(cached) " >&6 +else ax_cv_PTHREAD_SPECIAL_FLAGS=no case $target_os in solaris*) @@ -14958,26 +15881,24 @@ else $as_nop esac fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_SPECIAL_FLAGS" >&5 -printf "%s\n" "$ax_cv_PTHREAD_SPECIAL_FLAGS" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_SPECIAL_FLAGS" >&5 +$as_echo "$ax_cv_PTHREAD_SPECIAL_FLAGS" >&6; } if test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \ - test "x$ax_pthread_special_flags_added" != "xyes" -then : + test "x$ax_pthread_special_flags_added" != "xyes"; then : PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS" ax_pthread_special_flags_added=yes fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5 -printf %s "checking for PTHREAD_PRIO_INHERIT... " >&6; } -if test ${ax_cv_PTHREAD_PRIO_INHERIT+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5 +$as_echo_n "checking for PTHREAD_PRIO_INHERIT... " >&6; } +if ${ax_cv_PTHREAD_PRIO_INHERIT+:} false; then : + $as_echo_n "(cached) " >&6 +else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int -main (void) +main () { int i = PTHREAD_PRIO_INHERIT; return i; @@ -14985,23 +15906,21 @@ int i = PTHREAD_PRIO_INHERIT; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ax_cv_PTHREAD_PRIO_INHERIT=yes -else $as_nop +else ax_cv_PTHREAD_PRIO_INHERIT=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5 -printf "%s\n" "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5 +$as_echo "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; } if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \ - test "x$ax_pthread_prio_inherit_defined" != "xyes" -then : + test "x$ax_pthread_prio_inherit_defined" != "xyes"; then : -printf "%s\n" "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h +$as_echo "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h ax_pthread_prio_inherit_defined=yes @@ -15020,14 +15939,11 @@ fi case "x$CC" in #( x/*) : - if as_fn_executable_p ${CC}_r -then : + if as_fn_executable_p ${CC}_r; then : PTHREAD_CC="${CC}_r" fi - if test "x${CXX}" != "x" -then : - if as_fn_executable_p ${CXX}_r -then : + if test "x${CXX}" != "x"; then : + if as_fn_executable_p ${CXX}_r; then : PTHREAD_CXX="${CXX}_r" fi fi @@ -15038,12 +15954,11 @@ fi do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_PTHREAD_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_PTHREAD_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$PTHREAD_CC"; then ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. else @@ -15051,15 +15966,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_PTHREAD_CC="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -15070,29 +15981,27 @@ fi fi PTHREAD_CC=$ac_cv_prog_PTHREAD_CC if test -n "$PTHREAD_CC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 -printf "%s\n" "$PTHREAD_CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 +$as_echo "$PTHREAD_CC" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi test -n "$PTHREAD_CC" && break done test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" - if test "x${CXX}" != "x" -then : + if test "x${CXX}" != "x"; then : for ac_prog in ${CXX}_r do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_PTHREAD_CXX+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_PTHREAD_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else if test -n "$PTHREAD_CXX"; then ac_cv_prog_PTHREAD_CXX="$PTHREAD_CXX" # Let the user override the test. else @@ -15100,15 +16009,11 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac + test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_PTHREAD_CXX="$ac_prog" - printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -15119,11 +16024,11 @@ fi fi PTHREAD_CXX=$ac_cv_prog_PTHREAD_CXX if test -n "$PTHREAD_CXX"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CXX" >&5 -printf "%s\n" "$PTHREAD_CXX" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CXX" >&5 +$as_echo "$PTHREAD_CXX" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi test -n "$PTHREAD_CXX" && break @@ -15166,7 +16071,7 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu if test "$have_pthread" = yes; then - printf "%s\n" "#define HAVE_PTHREAD 1" >>confdefs.h + $as_echo "#define HAVE_PTHREAD 1" >>confdefs.h CC="$PTHREAD_CC" fi @@ -15183,11 +16088,10 @@ with_jwzgles_req=unspecified have_jwzgles=no # Check whether --with-gles was given. -if test ${with_gles+y} -then : +if test "${with_gles+set}" = set; then : withval=$with_gles; # This is documented after --with-gl with_jwzgles="$withval"; with_jwzgles_req="$withval" -else $as_nop +else with_jwzgles=no fi @@ -15196,28 +16100,28 @@ fi no) ;; /*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for JWZGLES headers" >&5 -printf %s "checking for JWZGLES headers... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JWZGLES headers" >&5 +$as_echo_n "checking for JWZGLES headers... " >&6; } d=$with_jwzgles/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for JWZGLES libs" >&5 -printf %s "checking for JWZGLES libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JWZGLES libs" >&5 +$as_echo_n "checking for JWZGLES libs... " >&6; } d=$with_jwzgles/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". @@ -15237,8 +16141,8 @@ printf "%s\n" "not found ($d: no such directory)" >&6; } if test "$with_jwzgles" = yes; then have_jwzgles=yes JWZGLES_OBJS='$(JWXYZ_BIN)/jwzgles.o' - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: emulating OpenGL 1.3 in terms of OpenGLES 1.x." >&5 -printf "%s\n" "emulating OpenGL 1.3 in terms of OpenGLES 1.x." >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: emulating OpenGL 1.3 in terms of OpenGLES 1.x." >&5 +$as_echo "emulating OpenGL 1.3 in terms of OpenGLES 1.x." >&6; } elif test "$with_jwzgles" != no; then echo "error: must be yes or no: --with-gles=$with_jwzgles" exit 1 @@ -15259,10 +16163,9 @@ gl_halfassed=no have_glext=no # Check whether --with-gl was given. -if test ${with_gl+y} -then : +if test "${with_gl+set}" = set; then : withval=$with_gl; with_gl="$withval"; with_gl_req="$withval" -else $as_nop +else with_gl=yes fi @@ -15271,28 +16174,28 @@ fi no) ;; /*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GL headers" >&5 -printf %s "checking for GL headers... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GL headers" >&5 +$as_echo_n "checking for GL headers... " >&6; } d=$with_gl/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GL libs" >&5 -printf %s "checking for GL libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GL libs" >&5 +$as_echo_n "checking for GL libs... " >&6; } d=$with_gl/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". @@ -15325,11 +16228,10 @@ if test "$with_gl" = yes; then fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` - ac_fn_c_check_header_compile "$LINENO" "GL/gl.h" "ac_cv_header_GL_gl_h" "$ac_includes_default" -if test "x$ac_cv_header_GL_gl_h" = xyes -then : + ac_fn_c_check_header_mongrel "$LINENO" "GL/gl.h" "ac_cv_header_GL_gl_h" "$ac_includes_default" +if test "x$ac_cv_header_GL_gl_h" = xyes; then : have_gl=yes -else $as_nop +else have_gl=no fi @@ -15342,11 +16244,10 @@ fi fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` - ac_fn_c_check_header_compile "$LINENO" "GL/glu.h" "ac_cv_header_GL_glu_h" "$ac_includes_default" -if test "x$ac_cv_header_GL_glu_h" = xyes -then : + ac_fn_c_check_header_mongrel "$LINENO" "GL/glu.h" "ac_cv_header_GL_glu_h" "$ac_includes_default" +if test "x$ac_cv_header_GL_glu_h" = xyes; then : have_gl=yes -else $as_nop +else have_gl=no fi @@ -15413,12 +16314,11 @@ if test "$with_gl" = yes; then CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for glDrawElements in -lGLESv3" >&5 -printf %s "checking for glDrawElements in -lGLESv3... " >&6; } -if test ${ac_cv_lib_GLESv3_glDrawElements+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for glDrawElements in -lGLESv3" >&5 +$as_echo_n "checking for glDrawElements in -lGLESv3... " >&6; } +if ${ac_cv_lib_GLESv3_glDrawElements+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lGLESv3 $GL_LIBS -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -15427,29 +16327,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char glDrawElements (); int -main (void) +main () { return glDrawElements (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_GLESv3_glDrawElements=yes -else $as_nop +else ac_cv_lib_GLESv3_glDrawElements=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_GLESv3_glDrawElements" >&5 -printf "%s\n" "$ac_cv_lib_GLESv3_glDrawElements" >&6; } -if test "x$ac_cv_lib_GLESv3_glDrawElements" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_GLESv3_glDrawElements" >&5 +$as_echo "$ac_cv_lib_GLESv3_glDrawElements" >&6; } +if test "x$ac_cv_lib_GLESv3_glDrawElements" = xyes; then : have_gl=yes gl_lib_1="GLESv3" GL_LIBS="-lGLESv3 $GL_LIBS" @@ -15479,12 +16380,11 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for glDrawElements in -lGLESv2" >&5 -printf %s "checking for glDrawElements in -lGLESv2... " >&6; } -if test ${ac_cv_lib_GLESv2_glDrawElements+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for glDrawElements in -lGLESv2" >&5 +$as_echo_n "checking for glDrawElements in -lGLESv2... " >&6; } +if ${ac_cv_lib_GLESv2_glDrawElements+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lGLESv2 $GL_LIBS -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -15493,29 +16393,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char glDrawElements (); int -main (void) +main () { return glDrawElements (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_GLESv2_glDrawElements=yes -else $as_nop +else ac_cv_lib_GLESv2_glDrawElements=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_GLESv2_glDrawElements" >&5 -printf "%s\n" "$ac_cv_lib_GLESv2_glDrawElements" >&6; } -if test "x$ac_cv_lib_GLESv2_glDrawElements" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_GLESv2_glDrawElements" >&5 +$as_echo "$ac_cv_lib_GLESv2_glDrawElements" >&6; } +if test "x$ac_cv_lib_GLESv2_glDrawElements" = xyes; then : have_gl=yes gl_lib_1="GLESv2" GL_LIBS="-lGLESv2 $GL_LIBS" @@ -15545,12 +16446,11 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for glDrawElements in -lGLESv1_CM" >&5 -printf %s "checking for glDrawElements in -lGLESv1_CM... " >&6; } -if test ${ac_cv_lib_GLESv1_CM_glDrawElements+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for glDrawElements in -lGLESv1_CM" >&5 +$as_echo_n "checking for glDrawElements in -lGLESv1_CM... " >&6; } +if ${ac_cv_lib_GLESv1_CM_glDrawElements+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lGLESv1_CM $GL_LIBS -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -15559,29 +16459,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char glDrawElements (); int -main (void) +main () { return glDrawElements (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_GLESv1_CM_glDrawElements=yes -else $as_nop +else ac_cv_lib_GLESv1_CM_glDrawElements=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_GLESv1_CM_glDrawElements" >&5 -printf "%s\n" "$ac_cv_lib_GLESv1_CM_glDrawElements" >&6; } -if test "x$ac_cv_lib_GLESv1_CM_glDrawElements" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_GLESv1_CM_glDrawElements" >&5 +$as_echo "$ac_cv_lib_GLESv1_CM_glDrawElements" >&6; } +if test "x$ac_cv_lib_GLESv1_CM_glDrawElements" = xyes; then : have_gl=yes gl_lib_1="GLESv1_CM" GL_LIBS="-lGLESv1_CM $GL_LIBS" @@ -15613,12 +16514,11 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for glEnable in -lGL" >&5 -printf %s "checking for glEnable in -lGL... " >&6; } -if test ${ac_cv_lib_GL_glEnable+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for glEnable in -lGL" >&5 +$as_echo_n "checking for glEnable in -lGL... " >&6; } +if ${ac_cv_lib_GL_glEnable+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lGL $GL_LIBS -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -15627,29 +16527,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char glEnable (); int -main (void) +main () { return glEnable (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_GL_glEnable=yes -else $as_nop +else ac_cv_lib_GL_glEnable=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_GL_glEnable" >&5 -printf "%s\n" "$ac_cv_lib_GL_glEnable" >&6; } -if test "x$ac_cv_lib_GL_glEnable" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_GL_glEnable" >&5 +$as_echo "$ac_cv_lib_GL_glEnable" >&6; } +if test "x$ac_cv_lib_GL_glEnable" = xyes; then : have_gl=yes gl_lib_1="GL" GL_LIBS="-lGL $GL_LIBS" @@ -15680,12 +16581,11 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for glEnable in -lMesaGL" >&5 -printf %s "checking for glEnable in -lMesaGL... " >&6; } -if test ${ac_cv_lib_MesaGL_glEnable+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for glEnable in -lMesaGL" >&5 +$as_echo_n "checking for glEnable in -lMesaGL... " >&6; } +if ${ac_cv_lib_MesaGL_glEnable+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lMesaGL $GL_LIBS -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -15694,29 +16594,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char glEnable (); int -main (void) +main () { return glEnable (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_MesaGL_glEnable=yes -else $as_nop +else ac_cv_lib_MesaGL_glEnable=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_MesaGL_glEnable" >&5 -printf "%s\n" "$ac_cv_lib_MesaGL_glEnable" >&6; } -if test "x$ac_cv_lib_MesaGL_glEnable" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_MesaGL_glEnable" >&5 +$as_echo "$ac_cv_lib_MesaGL_glEnable" >&6; } +if test "x$ac_cv_lib_MesaGL_glEnable" = xyes; then : have_gl=yes gl_lib_1="MesaGL" GL_LIBS="-lMesaGL $GL_LIBS" @@ -15754,13 +16655,12 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - as_ac_Lib=`printf "%s\n" "ac_cv_lib_$gl_lib_1""_gluBuild2DMipmaps" | $as_tr_sh` -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gluBuild2DMipmaps in -l$gl_lib_1" >&5 -printf %s "checking for gluBuild2DMipmaps in -l$gl_lib_1... " >&6; } -if eval test \${$as_ac_Lib+y} -then : - printf %s "(cached) " >&6 -else $as_nop + as_ac_Lib=`$as_echo "ac_cv_lib_$gl_lib_1''_gluBuild2DMipmaps" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gluBuild2DMipmaps in -l$gl_lib_1" >&5 +$as_echo_n "checking for gluBuild2DMipmaps in -l$gl_lib_1... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-l$gl_lib_1 $GL_LIBS -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -15769,37 +16669,38 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char gluBuild2DMipmaps (); int -main (void) +main () { return gluBuild2DMipmaps (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" -else $as_nop +else eval "$as_ac_Lib=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes" -then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF -#define `printf "%s\n" "HAVE_LIB$gl_lib_1" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_LIB$gl_lib_1" | $as_tr_cpp` 1 _ACEOF LIBS="-l$gl_lib_1 $LIBS" -else $as_nop +else have_gl=no fi @@ -15827,12 +16728,11 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gluBuild2DMipmaps in -lGLU" >&5 -printf %s "checking for gluBuild2DMipmaps in -lGLU... " >&6; } -if test ${ac_cv_lib_GLU_gluBuild2DMipmaps+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gluBuild2DMipmaps in -lGLU" >&5 +$as_echo_n "checking for gluBuild2DMipmaps in -lGLU... " >&6; } +if ${ac_cv_lib_GLU_gluBuild2DMipmaps+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lGLU $GL_LIBS -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -15841,32 +16741,33 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char gluBuild2DMipmaps (); int -main (void) +main () { return gluBuild2DMipmaps (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_GLU_gluBuild2DMipmaps=yes -else $as_nop +else ac_cv_lib_GLU_gluBuild2DMipmaps=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_GLU_gluBuild2DMipmaps" >&5 -printf "%s\n" "$ac_cv_lib_GLU_gluBuild2DMipmaps" >&6; } -if test "x$ac_cv_lib_GLU_gluBuild2DMipmaps" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_GLU_gluBuild2DMipmaps" >&5 +$as_echo "$ac_cv_lib_GLU_gluBuild2DMipmaps" >&6; } +if test "x$ac_cv_lib_GLU_gluBuild2DMipmaps" = xyes; then : have_gl=yes GL_LIBS="-lGLU $GL_LIBS" -else $as_nop +else have_gl=no gl_halfassed=yes fi @@ -15880,7 +16781,7 @@ fi if test "$have_gl" = yes; then - printf "%s\n" "#define HAVE_GL 1" >>confdefs.h + $as_echo "#define HAVE_GL 1" >>confdefs.h # OpenGL 1.0 didn't have multiple textures. @@ -15902,13 +16803,12 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - as_ac_Lib=`printf "%s\n" "ac_cv_lib_$gl_lib_1""_glBindTexture" | $as_tr_sh` -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for glBindTexture in -l$gl_lib_1" >&5 -printf %s "checking for glBindTexture in -l$gl_lib_1... " >&6; } -if eval test \${$as_ac_Lib+y} -then : - printf %s "(cached) " >&6 -else $as_nop + as_ac_Lib=`$as_echo "ac_cv_lib_$gl_lib_1''_glBindTexture" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for glBindTexture in -l$gl_lib_1" >&5 +$as_echo_n "checking for glBindTexture in -l$gl_lib_1... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-l$gl_lib_1 $GL_LIBS -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -15917,33 +16817,34 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char glBindTexture (); int -main (void) +main () { return glBindTexture (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" -else $as_nop +else eval "$as_ac_Lib=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes" -then : - printf "%s\n" "#define HAVE_GLBINDTEXTURE 1" >>confdefs.h + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + $as_echo "#define HAVE_GLBINDTEXTURE 1" >>confdefs.h -else $as_nop +else true fi @@ -15971,13 +16872,12 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - as_ac_Lib=`printf "%s\n" "ac_cv_lib_$gl_lib_1""_glBindBuffer" | $as_tr_sh` -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for glBindBuffer in -l$gl_lib_1" >&5 -printf %s "checking for glBindBuffer in -l$gl_lib_1... " >&6; } -if eval test \${$as_ac_Lib+y} -then : - printf %s "(cached) " >&6 -else $as_nop + as_ac_Lib=`$as_echo "ac_cv_lib_$gl_lib_1''_glBindBuffer" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for glBindBuffer in -l$gl_lib_1" >&5 +$as_echo_n "checking for glBindBuffer in -l$gl_lib_1... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-l$gl_lib_1 $GL_LIBS -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -15986,33 +16886,34 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char glBindBuffer (); int -main (void) +main () { return glBindBuffer (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" -else $as_nop +else eval "$as_ac_Lib=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes" -then : - printf "%s\n" "#define HAVE_GLES 1" >>confdefs.h + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + $as_echo "#define HAVE_GLES 1" >>confdefs.h -else $as_nop +else true fi @@ -16030,10 +16931,9 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "GL/glext.h" "ac_cv_header_GL_glext_h" "#include " -if test "x$ac_cv_header_GL_glext_h" = xyes -then : +if test "x$ac_cv_header_GL_glext_h" = xyes; then : have_glext=yes -else $as_nop +else have_glext=no fi @@ -16058,13 +16958,12 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - as_ac_Lib=`printf "%s\n" "ac_cv_lib_$gl_lib_1""_glUseProgram" | $as_tr_sh` -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for glUseProgram in -l$gl_lib_1" >&5 -printf %s "checking for glUseProgram in -l$gl_lib_1... " >&6; } -if eval test \${$as_ac_Lib+y} -then : - printf %s "(cached) " >&6 -else $as_nop + as_ac_Lib=`$as_echo "ac_cv_lib_$gl_lib_1''_glUseProgram" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for glUseProgram in -l$gl_lib_1" >&5 +$as_echo_n "checking for glUseProgram in -l$gl_lib_1... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-l$gl_lib_1 $GL_LIBS -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -16073,33 +16972,34 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char glUseProgram (); int -main (void) +main () { return glUseProgram (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" -else $as_nop +else eval "$as_ac_Lib=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes" -then : - printf "%s\n" "#define HAVE_GLSL 1" >>confdefs.h + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + $as_echo "#define HAVE_GLSL 1" >>confdefs.h - printf "%s\n" "#define HAVE_GLES2 1" >>confdefs.h + $as_echo "#define HAVE_GLES2 1" >>confdefs.h fi @@ -16129,13 +17029,12 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - as_ac_Lib=`printf "%s\n" "ac_cv_lib_$gl_lib_1""_glBlitFramebuffer" | $as_tr_sh` -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for glBlitFramebuffer in -l$gl_lib_1" >&5 -printf %s "checking for glBlitFramebuffer in -l$gl_lib_1... " >&6; } -if eval test \${$as_ac_Lib+y} -then : - printf %s "(cached) " >&6 -else $as_nop + as_ac_Lib=`$as_echo "ac_cv_lib_$gl_lib_1''_glBlitFramebuffer" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for glBlitFramebuffer in -l$gl_lib_1" >&5 +$as_echo_n "checking for glBlitFramebuffer in -l$gl_lib_1... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-l$gl_lib_1 $GL_LIBS -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -16144,31 +17043,32 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char glBlitFramebuffer (); int -main (void) +main () { return glBlitFramebuffer (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" -else $as_nop +else eval "$as_ac_Lib=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes" -then : - printf "%s\n" "#define HAVE_GLES3 1" >>confdefs.h + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + $as_echo "#define HAVE_GLES3 1" >>confdefs.h fi @@ -16177,9 +17077,9 @@ fi # LIBS="$ac_save_LIBS" if test "$have_jwzgles" = yes; then - printf "%s\n" "#define HAVE_JWZGLES 1" >>confdefs.h + $as_echo "#define HAVE_JWZGLES 1" >>confdefs.h - printf "%s\n" "#define HAVE_GLES 1" >>confdefs.h + $as_echo "#define HAVE_GLES 1" >>confdefs.h fi @@ -16201,10 +17101,9 @@ have_egl=no with_egl_req=unspecified # Check whether --with-glx was given. -if test ${with_glx+y} -then : +if test "${with_glx+set}" = set; then : withval=$with_glx; with_egl="$withval"; with_egl_req="$withval" -else $as_nop +else with_glx=no fi @@ -16213,28 +17112,28 @@ fi no) ;; /*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GLX headers" >&5 -printf %s "checking for GLX headers... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLX headers" >&5 +$as_echo_n "checking for GLX headers... " >&6; } d=$with_glx/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GLX libs" >&5 -printf %s "checking for GLX libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLX libs" >&5 +$as_echo_n "checking for GLX libs... " >&6; } d=$with_glx/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". @@ -16259,11 +17158,10 @@ if test "$with_glx" = yes; then fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` - ac_fn_c_check_header_compile "$LINENO" "GLX/glx.h" "ac_cv_header_GLX_glx_h" "$ac_includes_default" -if test "x$ac_cv_header_GLX_glx_h" = xyes -then : + ac_fn_c_check_header_mongrel "$LINENO" "GLX/glx.h" "ac_cv_header_GLX_glx_h" "$ac_includes_default" +if test "x$ac_cv_header_GLX_glx_h" = xyes; then : have_glx=yes -else $as_nop +else have_glx=no fi @@ -16295,13 +17193,12 @@ if test "$have_gl" = yes; then CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - as_ac_Lib=`printf "%s\n" "ac_cv_lib_$gl_lib_1""_glXCreateContext" | $as_tr_sh` -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for glXCreateContext in -l$gl_lib_1" >&5 -printf %s "checking for glXCreateContext in -l$gl_lib_1... " >&6; } -if eval test \${$as_ac_Lib+y} -then : - printf %s "(cached) " >&6 -else $as_nop + as_ac_Lib=`$as_echo "ac_cv_lib_$gl_lib_1''_glXCreateContext" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for glXCreateContext in -l$gl_lib_1" >&5 +$as_echo_n "checking for glXCreateContext in -l$gl_lib_1... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-l$gl_lib_1 $GL_LIBS -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -16310,32 +17207,33 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char glXCreateContext (); int -main (void) +main () { return glXCreateContext (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" -else $as_nop +else eval "$as_ac_Lib=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes" -then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : have_glx=yes -else $as_nop +else have_glx=no fi @@ -16364,13 +17262,12 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - as_ac_Lib=`printf "%s\n" "ac_cv_lib_$gl_lib_1""_eglCreatePlatformWindowSurface" | $as_tr_sh` -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for eglCreatePlatformWindowSurface in -l$gl_lib_1" >&5 -printf %s "checking for eglCreatePlatformWindowSurface in -l$gl_lib_1... " >&6; } -if eval test \${$as_ac_Lib+y} -then : - printf %s "(cached) " >&6 -else $as_nop + as_ac_Lib=`$as_echo "ac_cv_lib_$gl_lib_1''_eglCreatePlatformWindowSurface" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for eglCreatePlatformWindowSurface in -l$gl_lib_1" >&5 +$as_echo_n "checking for eglCreatePlatformWindowSurface in -l$gl_lib_1... " >&6; } +if eval \${$as_ac_Lib+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-l$gl_lib_1 $GL_LIBS -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -16379,32 +17276,33 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char eglCreatePlatformWindowSurface (); int -main (void) +main () { return eglCreatePlatformWindowSurface (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" -else $as_nop +else eval "$as_ac_Lib=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } -if eval test \"x\$"$as_ac_Lib"\" = x"yes" -then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : have_egl=yes -else $as_nop +else have_egl=no fi @@ -16433,12 +17331,11 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for eglCreatePlatformWindowSurface in -lEGL" >&5 -printf %s "checking for eglCreatePlatformWindowSurface in -lEGL... " >&6; } -if test ${ac_cv_lib_EGL_eglCreatePlatformWindowSurface+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for eglCreatePlatformWindowSurface in -lEGL" >&5 +$as_echo_n "checking for eglCreatePlatformWindowSurface in -lEGL... " >&6; } +if ${ac_cv_lib_EGL_eglCreatePlatformWindowSurface+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lEGL $GL_LIBS -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -16447,32 +17344,33 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char eglCreatePlatformWindowSurface (); int -main (void) +main () { return eglCreatePlatformWindowSurface (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_EGL_eglCreatePlatformWindowSurface=yes -else $as_nop +else ac_cv_lib_EGL_eglCreatePlatformWindowSurface=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_EGL_eglCreatePlatformWindowSurface" >&5 -printf "%s\n" "$ac_cv_lib_EGL_eglCreatePlatformWindowSurface" >&6; } -if test "x$ac_cv_lib_EGL_eglCreatePlatformWindowSurface" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_EGL_eglCreatePlatformWindowSurface" >&5 +$as_echo "$ac_cv_lib_EGL_eglCreatePlatformWindowSurface" >&6; } +if test "x$ac_cv_lib_EGL_eglCreatePlatformWindowSurface" = xyes; then : have_egl=yes egl_lib="EGL" -else $as_nop +else have_egl=no fi @@ -16488,7 +17386,7 @@ fi fi if test "$have_egl" = yes; then - printf "%s\n" "#define HAVE_EGL 1" >>confdefs.h + $as_echo "#define HAVE_EGL 1" >>confdefs.h if test \! -z "$egl_lib"; then GL_LIBS="-l$egl_lib $GL_LIBS" @@ -16507,8 +17405,8 @@ fi # There is no way to request a GLES 3.0 runtime context using GLX. # if test "$have_jwzgles" = yes -a "$have_egl" = no; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Using --with-glx and --with-gles together is a bad idea." >&5 -printf "%s\n" "$as_me: WARNING: Using --with-glx and --with-gles together is a bad idea." >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Using --with-glx and --with-gles together is a bad idea." >&5 +$as_echo "$as_me: WARNING: Using --with-glx and --with-gles together is a bad idea." >&2;} fi fi @@ -16529,10 +17427,9 @@ with_gle_req=unspecified gle_halfassed=no # Check whether --with-gle was given. -if test ${with_gle+y} -then : +if test "${with_gle+set}" = set; then : withval=$with_gle; with_gle="$withval"; with_gle_req="$withval" -else $as_nop +else with_gle=yes fi @@ -16541,28 +17438,28 @@ fi no) ;; /*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GLE headers" >&5 -printf %s "checking for GLE headers... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLE headers" >&5 +$as_echo_n "checking for GLE headers... " >&6; } d=$with_gle/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GLE libs" >&5 -printf %s "checking for GLE libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLE libs" >&5 +$as_echo_n "checking for GLE libs... " >&6; } d=$with_gle/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". @@ -16593,10 +17490,9 @@ elif test "$with_gle" = yes; then CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "GL/gle.h" "ac_cv_header_GL_gle_h" "#include " -if test "x$ac_cv_header_GL_gle_h" = xyes -then : +if test "x$ac_cv_header_GL_gle_h" = xyes; then : have_gle3=yes -else $as_nop +else have_gle3=no fi @@ -16613,10 +17509,9 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "GL/gutil.h" "ac_cv_header_GL_gutil_h" "#include " -if test "x$ac_cv_header_GL_gutil_h" = xyes -then : +if test "x$ac_cv_header_GL_gutil_h" = xyes; then : have_gle=yes -else $as_nop +else have_gle=no fi @@ -16631,10 +17526,9 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` ac_fn_c_check_header_compile "$LINENO" "GL/tube.h" "ac_cv_header_GL_tube_h" "#include " -if test "x$ac_cv_header_GL_tube_h" = xyes -then : +if test "x$ac_cv_header_GL_tube_h" = xyes; then : have_gle=yes -else $as_nop +else have_gle=no fi @@ -16664,12 +17558,11 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gleCreateGC in -lgle" >&5 -printf %s "checking for gleCreateGC in -lgle... " >&6; } -if test ${ac_cv_lib_gle_gleCreateGC+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gleCreateGC in -lgle" >&5 +$as_echo_n "checking for gleCreateGC in -lgle... " >&6; } +if ${ac_cv_lib_gle_gleCreateGC+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lgle $GL_LIBS -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -16678,29 +17571,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char gleCreateGC (); int -main (void) +main () { return gleCreateGC (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gle_gleCreateGC=yes -else $as_nop +else ac_cv_lib_gle_gleCreateGC=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gle_gleCreateGC" >&5 -printf "%s\n" "$ac_cv_lib_gle_gleCreateGC" >&6; } -if test "x$ac_cv_lib_gle_gleCreateGC" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gle_gleCreateGC" >&5 +$as_echo "$ac_cv_lib_gle_gleCreateGC" >&6; } +if test "x$ac_cv_lib_gle_gleCreateGC" = xyes; then : have_gle=yes; gle_halfassed=no; GLE_LIBS="-lgle" fi @@ -16745,12 +17639,11 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uview_direction in -lgle" >&5 -printf %s "checking for uview_direction in -lgle... " >&6; } -if test ${ac_cv_lib_gle_uview_direction+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uview_direction in -lgle" >&5 +$as_echo_n "checking for uview_direction in -lgle... " >&6; } +if ${ac_cv_lib_gle_uview_direction+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lgle $GL_LIBS -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -16759,29 +17652,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char uview_direction (); int -main (void) +main () { return uview_direction (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gle_uview_direction=yes -else $as_nop +else ac_cv_lib_gle_uview_direction=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gle_uview_direction" >&5 -printf "%s\n" "$ac_cv_lib_gle_uview_direction" >&6; } -if test "x$ac_cv_lib_gle_uview_direction" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gle_uview_direction" >&5 +$as_echo "$ac_cv_lib_gle_uview_direction" >&6; } +if test "x$ac_cv_lib_gle_uview_direction" = xyes; then : have_gle=yes; gle_halfassed=no fi @@ -16811,12 +17705,11 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uview_direction_d in -lmatrix" >&5 -printf %s "checking for uview_direction_d in -lmatrix... " >&6; } -if test ${ac_cv_lib_matrix_uview_direction_d+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uview_direction_d in -lmatrix" >&5 +$as_echo_n "checking for uview_direction_d in -lmatrix... " >&6; } +if ${ac_cv_lib_matrix_uview_direction_d+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lmatrix $GL_LIBS -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -16825,29 +17718,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char uview_direction_d (); int -main (void) +main () { return uview_direction_d (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_matrix_uview_direction_d=yes -else $as_nop +else ac_cv_lib_matrix_uview_direction_d=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_matrix_uview_direction_d" >&5 -printf "%s\n" "$ac_cv_lib_matrix_uview_direction_d" >&6; } -if test "x$ac_cv_lib_matrix_uview_direction_d" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_matrix_uview_direction_d" >&5 +$as_echo "$ac_cv_lib_matrix_uview_direction_d" >&6; } +if test "x$ac_cv_lib_matrix_uview_direction_d" = xyes; then : have_gle=yes; gle_halfassed=no; GLE_LIBS="$GLE_LIBS -lmatrix" fi @@ -16860,10 +17754,10 @@ fi fi if test "$have_gle" = yes ; then - printf "%s\n" "#define HAVE_GLE 1" >>confdefs.h + $as_echo "#define HAVE_GLE 1" >>confdefs.h if test "$have_gle3" = yes ; then - printf "%s\n" "#define HAVE_GLE3 1" >>confdefs.h + $as_echo "#define HAVE_GLE3 1" >>confdefs.h fi fi @@ -16885,10 +17779,9 @@ with_jpeg_req=unspecified jpeg_halfassed=no # Check whether --with-jpeg was given. -if test ${with_jpeg+y} -then : +if test "${with_jpeg+set}" = set; then : withval=$with_jpeg; with_jpeg="$withval"; with_jpeg_req="$withval" -else $as_nop +else with_jpeg=yes fi @@ -16897,28 +17790,28 @@ fi no) ;; /*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for JPEG headers" >&5 -printf %s "checking for JPEG headers... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JPEG headers" >&5 +$as_echo_n "checking for JPEG headers... " >&6; } d=$with_jpeg/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for JPEG libs" >&5 -printf %s "checking for JPEG libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for JPEG libs" >&5 +$as_echo_n "checking for JPEG libs... " >&6; } d=$with_jpeg/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". @@ -16950,9 +17843,8 @@ if test "$with_jpeg" = yes; then fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` - ac_fn_c_check_header_compile "$LINENO" "jpeglib.h" "ac_cv_header_jpeglib_h" "$ac_includes_default" -if test "x$ac_cv_header_jpeglib_h" = xyes -then : + ac_fn_c_check_header_mongrel "$LINENO" "jpeglib.h" "ac_cv_header_jpeglib_h" "$ac_includes_default" +if test "x$ac_cv_header_jpeglib_h" = xyes; then : have_jpeg=yes fi @@ -16981,12 +17873,11 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for jpeg_start_compress in -ljpeg" >&5 -printf %s "checking for jpeg_start_compress in -ljpeg... " >&6; } -if test ${ac_cv_lib_jpeg_jpeg_start_compress+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jpeg_start_compress in -ljpeg" >&5 +$as_echo_n "checking for jpeg_start_compress in -ljpeg... " >&6; } +if ${ac_cv_lib_jpeg_jpeg_start_compress+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-ljpeg $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -16995,33 +17886,34 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char jpeg_start_compress (); int -main (void) +main () { return jpeg_start_compress (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_jpeg_jpeg_start_compress=yes -else $as_nop +else ac_cv_lib_jpeg_jpeg_start_compress=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_jpeg_start_compress" >&5 -printf "%s\n" "$ac_cv_lib_jpeg_jpeg_start_compress" >&6; } -if test "x$ac_cv_lib_jpeg_jpeg_start_compress" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_jpeg_start_compress" >&5 +$as_echo "$ac_cv_lib_jpeg_jpeg_start_compress" >&6; } +if test "x$ac_cv_lib_jpeg_jpeg_start_compress" = xyes; then : have_jpeg=yes jpeg_halfassed=no JPEG_LIBS="-ljpeg" - printf "%s\n" "#define HAVE_JPEGLIB 1" >>confdefs.h + $as_echo "#define HAVE_JPEGLIB 1" >>confdefs.h fi @@ -17043,10 +17935,9 @@ with_png_req=unspecified png_halfassed=no # Check whether --with-png was given. -if test ${with_png+y} -then : +if test "${with_png+set}" = set; then : withval=$with_png; with_png="$withval"; with_png_req="$withval" -else $as_nop +else with_png=yes fi @@ -17055,28 +17946,28 @@ fi no) ;; /*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PNG headers" >&5 -printf %s "checking for PNG headers... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PNG headers" >&5 +$as_echo_n "checking for PNG headers... " >&6; } d=$with_png/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PNG libs" >&5 -printf %s "checking for PNG libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PNG libs" >&5 +$as_echo_n "checking for PNG libs... " >&6; } d=$with_png/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". @@ -17108,9 +17999,8 @@ if test "$with_png" = yes; then fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` - ac_fn_c_check_header_compile "$LINENO" "png.h" "ac_cv_header_png_h" "$ac_includes_default" -if test "x$ac_cv_header_png_h" = xyes -then : + ac_fn_c_check_header_mongrel "$LINENO" "png.h" "ac_cv_header_png_h" "$ac_includes_default" +if test "x$ac_cv_header_png_h" = xyes; then : have_png=yes fi @@ -17139,12 +18029,11 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for png_create_read_struct in -lpng" >&5 -printf %s "checking for png_create_read_struct in -lpng... " >&6; } -if test ${ac_cv_lib_png_png_create_read_struct+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for png_create_read_struct in -lpng" >&5 +$as_echo_n "checking for png_create_read_struct in -lpng... " >&6; } +if ${ac_cv_lib_png_png_create_read_struct+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lpng $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -17153,33 +18042,34 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char png_create_read_struct (); int -main (void) +main () { return png_create_read_struct (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_png_png_create_read_struct=yes -else $as_nop +else ac_cv_lib_png_png_create_read_struct=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_png_png_create_read_struct" >&5 -printf "%s\n" "$ac_cv_lib_png_png_create_read_struct" >&6; } -if test "x$ac_cv_lib_png_png_create_read_struct" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_png_png_create_read_struct" >&5 +$as_echo "$ac_cv_lib_png_png_create_read_struct" >&6; } +if test "x$ac_cv_lib_png_png_create_read_struct" = xyes; then : have_png=yes png_halfassed=no PNG_LIBS="-lpng" - printf "%s\n" "#define HAVE_LIBPNG 1" >>confdefs.h + $as_echo "#define HAVE_LIBPNG 1" >>confdefs.h fi @@ -17204,10 +18094,9 @@ have_gdk_pixbuf=no with_gdk_pixbuf_req=unspecified # Check whether --with-pixbuf was given. -if test ${with_pixbuf+y} -then : +if test "${with_pixbuf+set}" = set; then : withval=$with_pixbuf; with_gdk_pixbuf="$withval"; with_gdk_pixbuf_req="$withval" -else $as_nop +else with_gdk_pixbuf=yes fi @@ -17227,28 +18116,28 @@ esac no) ;; /*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GDK_PIXBUF headers" >&5 -printf %s "checking for GDK_PIXBUF headers... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GDK_PIXBUF headers" >&5 +$as_echo_n "checking for GDK_PIXBUF headers... " >&6; } d=$with_gdk_pixbuf/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GDK_PIXBUF libs" >&5 -printf %s "checking for GDK_PIXBUF libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GDK_PIXBUF libs" >&5 +$as_echo_n "checking for GDK_PIXBUF libs... " >&6; } d=$with_gdk_pixbuf/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". @@ -17282,26 +18171,24 @@ if test "$with_gdk_pixbuf" = yes; then have_gdk_pixbuf="$ok" if test "$have_gdk_pixbuf" = yes; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gdk-pixbuf includes" >&5 -printf %s "checking for gdk-pixbuf includes... " >&6; } -if test ${ac_cv_gdk_pixbuf_config_cflags+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gdk-pixbuf includes" >&5 +$as_echo_n "checking for gdk-pixbuf includes... " >&6; } +if ${ac_cv_gdk_pixbuf_config_cflags+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_cv_gdk_pixbuf_config_cflags=`$pkg_config --cflags $pkgs` fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gdk_pixbuf_config_cflags" >&5 -printf "%s\n" "$ac_cv_gdk_pixbuf_config_cflags" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gdk-pixbuf libs" >&5 -printf %s "checking for gdk-pixbuf libs... " >&6; } -if test ${ac_cv_gdk_pixbuf_config_libs+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gdk_pixbuf_config_cflags" >&5 +$as_echo "$ac_cv_gdk_pixbuf_config_cflags" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gdk-pixbuf libs" >&5 +$as_echo_n "checking for gdk-pixbuf libs... " >&6; } +if ${ac_cv_gdk_pixbuf_config_libs+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_cv_gdk_pixbuf_config_libs=`$pkg_config --libs $pkgs` fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gdk_pixbuf_config_libs" >&5 -printf "%s\n" "$ac_cv_gdk_pixbuf_config_libs" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gdk_pixbuf_config_libs" >&5 +$as_echo "$ac_cv_gdk_pixbuf_config_libs" >&6; } fi ac_gdk_pixbuf_config_cflags=$ac_cv_gdk_pixbuf_config_cflags @@ -17324,9 +18211,8 @@ printf "%s\n" "$ac_cv_gdk_pixbuf_config_libs" >&6; } fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` - ac_fn_c_check_header_compile "$LINENO" "gdk-pixbuf/gdk-pixbuf.h" "ac_cv_header_gdk_pixbuf_gdk_pixbuf_h" "$ac_includes_default" -if test "x$ac_cv_header_gdk_pixbuf_gdk_pixbuf_h" = xyes -then : + ac_fn_c_check_header_mongrel "$LINENO" "gdk-pixbuf/gdk-pixbuf.h" "ac_cv_header_gdk_pixbuf_gdk_pixbuf_h" "$ac_includes_default" +if test "x$ac_cv_header_gdk_pixbuf_gdk_pixbuf_h" = xyes; then : have_gdk_pixbuf=yes fi @@ -17343,9 +18229,8 @@ fi fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` - ac_fn_c_check_header_compile "$LINENO" "gdk-pixbuf/gdk-pixbuf-xlib.h" "ac_cv_header_gdk_pixbuf_gdk_pixbuf_xlib_h" "$ac_includes_default" -if test "x$ac_cv_header_gdk_pixbuf_gdk_pixbuf_xlib_h" = xyes -then : + ac_fn_c_check_header_mongrel "$LINENO" "gdk-pixbuf/gdk-pixbuf-xlib.h" "ac_cv_header_gdk_pixbuf_gdk_pixbuf_xlib_h" "$ac_includes_default" +if test "x$ac_cv_header_gdk_pixbuf_gdk_pixbuf_xlib_h" = xyes; then : have_gdk_pixbuf=yes gdk_pixbuf_halfassed=no fi @@ -17363,9 +18248,8 @@ fi fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` - ac_fn_c_check_header_compile "$LINENO" "gdk-pixbuf-xlib/gdk-pixbuf-xlib.h" "ac_cv_header_gdk_pixbuf_xlib_gdk_pixbuf_xlib_h" "$ac_includes_default" -if test "x$ac_cv_header_gdk_pixbuf_xlib_gdk_pixbuf_xlib_h" = xyes -then : + ac_fn_c_check_header_mongrel "$LINENO" "gdk-pixbuf-xlib/gdk-pixbuf-xlib.h" "ac_cv_header_gdk_pixbuf_xlib_gdk_pixbuf_xlib_h" "$ac_includes_default" +if test "x$ac_cv_header_gdk_pixbuf_xlib_gdk_pixbuf_xlib_h" = xyes; then : have_gdk_pixbuf=yes gdk_pixbuf_halfassed=no fi @@ -17381,8 +18265,8 @@ fi have_gdk_pixbuf=no gdk_pixbuf_halfassed=yes - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking for gdk_pixbuf usability..." >&5 -printf "%s\n" "checking for gdk_pixbuf usability..." >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for gdk_pixbuf usability..." >&5 +$as_echo "checking for gdk_pixbuf usability..." >&6; } # library A... @@ -17404,12 +18288,11 @@ printf "%s\n" "checking for gdk_pixbuf usability..." >&6; } CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gdk_pixbuf_new_from_file in -lc" >&5 -printf %s "checking for gdk_pixbuf_new_from_file in -lc... " >&6; } -if test ${ac_cv_lib_c_gdk_pixbuf_new_from_file+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gdk_pixbuf_new_from_file in -lc" >&5 +$as_echo_n "checking for gdk_pixbuf_new_from_file in -lc... " >&6; } +if ${ac_cv_lib_c_gdk_pixbuf_new_from_file+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $ac_gdk_pixbuf_config_libs -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -17418,29 +18301,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char gdk_pixbuf_new_from_file (); int -main (void) +main () { return gdk_pixbuf_new_from_file (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_gdk_pixbuf_new_from_file=yes -else $as_nop +else ac_cv_lib_c_gdk_pixbuf_new_from_file=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_gdk_pixbuf_new_from_file" >&5 -printf "%s\n" "$ac_cv_lib_c_gdk_pixbuf_new_from_file" >&6; } -if test "x$ac_cv_lib_c_gdk_pixbuf_new_from_file" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_gdk_pixbuf_new_from_file" >&5 +$as_echo "$ac_cv_lib_c_gdk_pixbuf_new_from_file" >&6; } +if test "x$ac_cv_lib_c_gdk_pixbuf_new_from_file" = xyes; then : have_gdk_pixbuf=yes fi @@ -17470,12 +18354,11 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gdk_pixbuf_xlib_init in -lc" >&5 -printf %s "checking for gdk_pixbuf_xlib_init in -lc... " >&6; } -if test ${ac_cv_lib_c_gdk_pixbuf_xlib_init+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gdk_pixbuf_xlib_init in -lc" >&5 +$as_echo_n "checking for gdk_pixbuf_xlib_init in -lc... " >&6; } +if ${ac_cv_lib_c_gdk_pixbuf_xlib_init+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $ac_gdk_pixbuf_config_libs -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -17484,29 +18367,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char gdk_pixbuf_xlib_init (); int -main (void) +main () { return gdk_pixbuf_xlib_init (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_gdk_pixbuf_xlib_init=yes -else $as_nop +else ac_cv_lib_c_gdk_pixbuf_xlib_init=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_gdk_pixbuf_xlib_init" >&5 -printf "%s\n" "$ac_cv_lib_c_gdk_pixbuf_xlib_init" >&6; } -if test "x$ac_cv_lib_c_gdk_pixbuf_xlib_init" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_gdk_pixbuf_xlib_init" >&5 +$as_echo "$ac_cv_lib_c_gdk_pixbuf_xlib_init" >&6; } +if test "x$ac_cv_lib_c_gdk_pixbuf_xlib_init" = xyes; then : have_gdk_pixbuf=yes gdk_pixbuf_halfassed=no fi @@ -17521,11 +18405,11 @@ fi if test "$have_gdk_pixbuf" = yes; then INCLUDES="$INCLUDES $ac_gdk_pixbuf_config_cflags" PNG_LIBS="$ac_gdk_pixbuf_config_libs" - printf "%s\n" "#define HAVE_GDK_PIXBUF 1" >>confdefs.h + $as_echo "#define HAVE_GDK_PIXBUF 1" >>confdefs.h else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking for gdk_pixbuf usability... no" >&5 -printf "%s\n" "checking for gdk_pixbuf usability... no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for gdk_pixbuf usability... no" >&5 +$as_echo "checking for gdk_pixbuf usability... no" >&6; } fi if test "$have_gdk_pixbuf" = yes; then @@ -17548,12 +18432,11 @@ printf "%s\n" "checking for gdk_pixbuf usability... no" >&6; } CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gdk_pixbuf_apply_embedded_orientation in -lc" >&5 -printf %s "checking for gdk_pixbuf_apply_embedded_orientation in -lc... " >&6; } -if test ${ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gdk_pixbuf_apply_embedded_orientation in -lc" >&5 +$as_echo_n "checking for gdk_pixbuf_apply_embedded_orientation in -lc... " >&6; } +if ${ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $ac_gdk_pixbuf_config_libs -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -17562,30 +18445,31 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char gdk_pixbuf_apply_embedded_orientation (); int -main (void) +main () { return gdk_pixbuf_apply_embedded_orientation (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation=yes -else $as_nop +else ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation" >&5 -printf "%s\n" "$ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation" >&6; } -if test "x$ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation" = xyes -then : - printf "%s\n" "#define HAVE_GDK_PIXBUF_APPLY_EMBEDDED_ORIENTATION 1" >>confdefs.h +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation" >&5 +$as_echo "$ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation" >&6; } +if test "x$ac_cv_lib_c_gdk_pixbuf_apply_embedded_orientation" = xyes; then : + $as_echo "#define HAVE_GDK_PIXBUF_APPLY_EMBEDDED_ORIENTATION 1" >>confdefs.h fi @@ -17622,12 +18506,11 @@ have_xutf8drawstring=no CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Xutf8DrawString in -lX11" >&5 -printf %s "checking for Xutf8DrawString in -lX11... " >&6; } -if test ${ac_cv_lib_X11_Xutf8DrawString+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Xutf8DrawString in -lX11" >&5 +$as_echo_n "checking for Xutf8DrawString in -lX11... " >&6; } +if ${ac_cv_lib_X11_Xutf8DrawString+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lX11 -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -17636,31 +18519,32 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char Xutf8DrawString (); int -main (void) +main () { return Xutf8DrawString (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_X11_Xutf8DrawString=yes -else $as_nop +else ac_cv_lib_X11_Xutf8DrawString=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_X11_Xutf8DrawString" >&5 -printf "%s\n" "$ac_cv_lib_X11_Xutf8DrawString" >&6; } -if test "x$ac_cv_lib_X11_Xutf8DrawString" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_X11_Xutf8DrawString" >&5 +$as_echo "$ac_cv_lib_X11_Xutf8DrawString" >&6; } +if test "x$ac_cv_lib_X11_Xutf8DrawString" = xyes; then : have_xutf8drawstring=yes -else $as_nop +else true fi @@ -17669,7 +18553,7 @@ fi # LIBS="$ac_save_LIBS" if test "$have_xutf8drawstring" = yes ; then - printf "%s\n" "#define HAVE_XUTF8DRAWSTRING 1" >>confdefs.h + $as_echo "#define HAVE_XUTF8DRAWSTRING 1" >>confdefs.h fi @@ -17678,10 +18562,9 @@ with_xft_req=unspecified xft_halfassed=no # Check whether --with-xft was given. -if test ${with_xft+y} -then : +if test "${with_xft+set}" = set; then : withval=$with_xft; with_xft="$withval"; with_xft_req="$withval" -else $as_nop +else with_xft=yes fi @@ -17690,28 +18573,28 @@ fi no) ;; /*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Xft headers" >&5 -printf %s "checking for Xft headers... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Xft headers" >&5 +$as_echo_n "checking for Xft headers... " >&6; } d=$with_xft/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Xft libs" >&5 -printf %s "checking for Xft libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Xft libs" >&5 +$as_echo_n "checking for Xft libs... " >&6; } d=$with_xft/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". @@ -17741,26 +18624,24 @@ if test "$with_xft" = yes; then have_xft="$ok" if test "$have_xft" = yes; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Xft includes" >&5 -printf %s "checking for Xft includes... " >&6; } -if test ${ac_cv_xft_config_cflags+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Xft includes" >&5 +$as_echo_n "checking for Xft includes... " >&6; } +if ${ac_cv_xft_config_cflags+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_cv_xft_config_cflags=`$pkg_config --cflags $pkgs` fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_xft_config_cflags" >&5 -printf "%s\n" "$ac_cv_xft_config_cflags" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Xft libs" >&5 -printf %s "checking for Xft libs... " >&6; } -if test ${ac_cv_xft_config_libs+y} -then : - printf %s "(cached) " >&6 -else $as_nop +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_xft_config_cflags" >&5 +$as_echo "$ac_cv_xft_config_cflags" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Xft libs" >&5 +$as_echo_n "checking for Xft libs... " >&6; } +if ${ac_cv_xft_config_libs+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_cv_xft_config_libs=`$pkg_config --libs $pkgs` fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_xft_config_libs" >&5 -printf "%s\n" "$ac_cv_xft_config_libs" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_xft_config_libs" >&5 +$as_echo "$ac_cv_xft_config_libs" >&6; } fi ac_xft_config_cflags=$ac_cv_xft_config_cflags @@ -17781,9 +18662,8 @@ printf "%s\n" "$ac_cv_xft_config_libs" >&6; } fi CPPFLAGS="$CPPFLAGS $X_CFLAGS" CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` - ac_fn_c_check_header_compile "$LINENO" "X11/Xft/Xft.h" "ac_cv_header_X11_Xft_Xft_h" "$ac_includes_default" -if test "x$ac_cv_header_X11_Xft_Xft_h" = xyes -then : + ac_fn_c_check_header_mongrel "$LINENO" "X11/Xft/Xft.h" "ac_cv_header_X11_Xft_Xft_h" "$ac_includes_default" +if test "x$ac_cv_header_X11_Xft_Xft_h" = xyes; then : have_xft=yes fi @@ -17797,8 +18677,8 @@ fi have_xft=no xft_halfassed=yes - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking for Xft usability..." >&5 -printf "%s\n" "checking for Xft usability..." >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for Xft usability..." >&5 +$as_echo "checking for Xft usability..." >&6; } ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" @@ -17818,12 +18698,11 @@ printf "%s\n" "checking for Xft usability..." >&6; } CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XftDrawStringUtf8 in -lc" >&5 -printf %s "checking for XftDrawStringUtf8 in -lc... " >&6; } -if test ${ac_cv_lib_c_XftDrawStringUtf8+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XftDrawStringUtf8 in -lc" >&5 +$as_echo_n "checking for XftDrawStringUtf8 in -lc... " >&6; } +if ${ac_cv_lib_c_XftDrawStringUtf8+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $ac_xft_config_libs -lX11 -lXext -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -17832,29 +18711,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char XftDrawStringUtf8 (); int -main (void) +main () { return XftDrawStringUtf8 (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_XftDrawStringUtf8=yes -else $as_nop +else ac_cv_lib_c_XftDrawStringUtf8=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_XftDrawStringUtf8" >&5 -printf "%s\n" "$ac_cv_lib_c_XftDrawStringUtf8" >&6; } -if test "x$ac_cv_lib_c_XftDrawStringUtf8" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_XftDrawStringUtf8" >&5 +$as_echo "$ac_cv_lib_c_XftDrawStringUtf8" >&6; } +if test "x$ac_cv_lib_c_XftDrawStringUtf8" = xyes; then : have_xft=yes fi @@ -17865,8 +18745,8 @@ fi fi if test "$have_xft" = no; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: checking for Xft usability... no" >&5 -printf "%s\n" "checking for Xft usability... no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for Xft usability... no" >&5 +$as_echo "checking for Xft usability... no" >&6; } fi fi @@ -17875,7 +18755,7 @@ if test "$have_xft" = yes; then XFT_LIBS="$ac_xft_config_libs" XFT_SRCS='' XFT_OBJS='' - printf "%s\n" "#define HAVE_XFT 1" >>confdefs.h + $as_echo "#define HAVE_XFT 1" >>confdefs.h else XFT_LIBS='' @@ -17891,24 +18771,18 @@ fi ############################################################################### PTY_LIBS= -ac_fn_c_check_header_compile "$LINENO" "pty.h" "ac_cv_header_pty_h" "$ac_includes_default" -if test "x$ac_cv_header_pty_h" = xyes -then : - printf "%s\n" "#define HAVE_PTY_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "util.h" "ac_cv_header_util_h" "$ac_includes_default" -if test "x$ac_cv_header_util_h" = xyes -then : - printf "%s\n" "#define HAVE_UTIL_H 1" >>confdefs.h +for ac_header in pty.h util.h sys/termios.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF fi -ac_fn_c_check_header_compile "$LINENO" "sys/termios.h" "ac_cv_header_sys_termios_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_termios_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_TERMIOS_H 1" >>confdefs.h -fi +done ac_save_CPPFLAGS="$CPPFLAGS" ac_save_LDFLAGS="$LDFLAGS" @@ -17928,12 +18802,11 @@ fi CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for forkpty in -lutil" >&5 -printf %s "checking for forkpty in -lutil... " >&6; } -if test ${ac_cv_lib_util_forkpty+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for forkpty in -lutil" >&5 +$as_echo_n "checking for forkpty in -lutil... " >&6; } +if ${ac_cv_lib_util_forkpty+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lutil $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -17942,32 +18815,33 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char forkpty (); int -main (void) +main () { return forkpty (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_util_forkpty=yes -else $as_nop +else ac_cv_lib_util_forkpty=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_util_forkpty" >&5 -printf "%s\n" "$ac_cv_lib_util_forkpty" >&6; } -if test "x$ac_cv_lib_util_forkpty" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_util_forkpty" >&5 +$as_echo "$ac_cv_lib_util_forkpty" >&6; } +if test "x$ac_cv_lib_util_forkpty" = xyes; then : PTY_LIBS="-lutil" ac_have_forkpty=yes - printf "%s\n" "#define HAVE_FORKPTY 1" >>confdefs.h + $as_echo "#define HAVE_FORKPTY 1" >>confdefs.h fi @@ -17996,12 +18870,11 @@ if test "$ac_have_forkpty" != yes ; then CPPFLAGS=`eval eval eval eval eval eval eval eval eval echo $CPPFLAGS` LDFLAGS=`eval eval eval eval eval eval eval eval eval echo $LDFLAGS` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for forkpty in -lc" >&5 -printf %s "checking for forkpty in -lc... " >&6; } -if test ${ac_cv_lib_c_forkpty+y} -then : - printf %s "(cached) " >&6 -else $as_nop + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for forkpty in -lc" >&5 +$as_echo_n "checking for forkpty in -lc... " >&6; } +if ${ac_cv_lib_c_forkpty+:} false; then : + $as_echo_n "(cached) " >&6 +else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -18010,31 +18883,32 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif char forkpty (); int -main (void) +main () { return forkpty (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO" -then : +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_forkpty=yes -else $as_nop +else ac_cv_lib_c_forkpty=no fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ +rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_forkpty" >&5 -printf "%s\n" "$ac_cv_lib_c_forkpty" >&6; } -if test "x$ac_cv_lib_c_forkpty" = xyes -then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_forkpty" >&5 +$as_echo "$ac_cv_lib_c_forkpty" >&6; } +if test "x$ac_cv_lib_c_forkpty" = xyes; then : PTY_LIBS="" - printf "%s\n" "#define HAVE_FORKPTY 1" >>confdefs.h + $as_echo "#define HAVE_FORKPTY 1" >>confdefs.h fi @@ -18099,10 +18973,9 @@ fi setuid_hacks="$setuid_hacks_default" # Check whether --with-setuid-hacks was given. -if test ${with_setuid_hacks+y} -then : +if test "${with_setuid_hacks+set}" = set; then : withval=$with_setuid_hacks; setuid_hacks="$withval" -else $as_nop +else setuid_hacks="$setuid_hacks_default" fi @@ -18111,28 +18984,28 @@ fi no) ;; /*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for setuid hacks headers" >&5 -printf %s "checking for setuid hacks headers... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for setuid hacks headers" >&5 +$as_echo_n "checking for setuid hacks headers... " >&6; } d=$setuid_hacks/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for setuid hacks libs" >&5 -printf %s "checking for setuid hacks libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for setuid hacks libs" >&5 +$as_echo_n "checking for setuid hacks libs... " >&6; } d=$setuid_hacks/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". @@ -18166,10 +19039,9 @@ record_anim_default=no record_anim="$record_anim_default" # Check whether --with-record-animation was given. -if test ${with_record_animation+y} -then : +if test "${with_record_animation+set}" = set; then : withval=$with_record_animation; record_anim="$withval" -else $as_nop +else record_anim="$record_anim_default" fi @@ -18178,28 +19050,28 @@ fi no) ;; /*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for record animation headers" >&5 -printf %s "checking for record animation headers... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for record animation headers" >&5 +$as_echo_n "checking for record animation headers... " >&6; } d=$record_anim/include if test -d $d; then X_CFLAGS="-I$d $X_CFLAGS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for record animation libs" >&5 -printf %s "checking for record animation libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for record animation libs" >&5 +$as_echo_n "checking for record animation libs... " >&6; } d=$record_anim/lib if test -d $d; then X_LIBS="-L$d $X_LIBS" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $d" >&5 -printf "%s\n" "$d" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $d" >&5 +$as_echo "$d" >&6; } else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 -printf "%s\n" "not found ($d: no such directory)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found ($d: no such directory)" >&5 +$as_echo "not found ($d: no such directory)" >&6; } fi # replace the directory string with "yes". @@ -18225,11 +19097,12 @@ fi if test "$record_anim" = yes; then if test "$have_gdk_pixbuf" != yes; then - as_fn_error $? "--with-record-animation requires GDK-Pixbuf" "$LINENO" 5 + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-record-animation requires GDK-Pixbuf" >&5 +$as_echo "$as_me: WARNING: --with-record-animation requires GDK-Pixbuf" >&2;} else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: enabling --with-record-animation" >&5 -printf "%s\n" "enabling --with-record-animation" >&6; } - printf "%s\n" "#define HAVE_RECORD_ANIM 1" >>confdefs.h + { $as_echo "$as_me:${as_lineno-$LINENO}: result: enabling --with-record-animation" >&5 +$as_echo "enabling --with-record-animation" >&6; } + $as_echo "#define HAVE_RECORD_ANIM 1" >>confdefs.h ANIM_OBJS='$(ANIM_OBJS)' ANIM_LIBS='$(ANIM_LIBS)' @@ -18280,12 +19153,8 @@ if test "$enable_pam_check_account_type" = yes; then else COMMENT_PAM_CHECK_ACCOUNT="#" fi -#if test "$have_passwd_helper" = yes; then -# PASSWD_SRCS="$PASSWD_SRCS \$(PWHELPER_SRCS)" -# PASSWD_OBJS="$PASSWD_OBJS \$(PWHELPER_OBJS)" -#fi - PASSWD_SRCS="$PASSWD_SRCS \$(PWENT_SRCS)" - PASSWD_OBJS="$PASSWD_OBJS \$(PWENT_OBJS)" +PASSWD_SRCS="$PASSWD_SRCS \$(PWENT_SRCS)" +PASSWD_OBJS="$PASSWD_OBJS \$(PWENT_OBJS)" if test "$enable_locking" = yes; then LOCK_SRCS='$(LOCK_SRCS_1) $(PASSWD_SRCS)' @@ -18364,8 +19233,8 @@ fi # Set PO_DATADIR to something sensible. # -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for locale directory" >&5 -printf %s "checking for locale directory... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for locale directory" >&5 +$as_echo_n "checking for locale directory... " >&6; } if test -n "$GTK_DATADIR" ; then PO_DATADIR="$GTK_DATADIR" elif test "$have_gtk" = yes; then @@ -18383,8 +19252,8 @@ if test -z "$PO_DATADIR" ; then PO_DATADIR=`echo $dd | sed 's@/X11R6/@/@'` fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PO_DATADIR/locale" >&5 -printf "%s\n" "$PO_DATADIR/locale" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $PO_DATADIR/locale" >&5 +$as_echo "$PO_DATADIR/locale" >&6; } # canonicalize slashes. HACK_CONF_DIR=`echo "${HACK_CONF_DIR}" | sed 's@/$@@;s@//*@/@g'` @@ -18437,8 +19306,8 @@ _ACEOF case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -18468,15 +19337,15 @@ printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} /^ac_cv_env_/b end t clear :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -printf "%s\n" "$as_me: updating cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else @@ -18490,8 +19359,8 @@ printf "%s\n" "$as_me: updating cache $cache_file" >&6;} fi fi else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -18508,7 +19377,7 @@ U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" @@ -18524,8 +19393,8 @@ LTLIBOBJS=$ac_ltlibobjs ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL @@ -18548,16 +19417,14 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -as_nop=: -if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 -then : +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else $as_nop +else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -18566,45 +19433,46 @@ else $as_nop esac fi -# Reset variables that may have inherited troublesome values from -# the environment. - -# IFS needs to be set, to space, tab, and newline, in precisely that order. -# (If _AS_PATH_WALK were called with IFS unset, it would have the -# side effect of setting IFS to empty, thus disabling word splitting.) -# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -IFS=" "" $as_nl" - -PS1='$ ' -PS2='> ' -PS4='+ ' - -# Ensure predictable behavior from utilities with locale-dependent output. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# We cannot yet rely on "unset" to work, but we need these variables -# to be unset--not just set to an empty or harmless value--now, to -# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct -# also avoids known problems related to "unset" and subshell syntax -# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). -for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH -do eval test \${$as_var+y} \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done - -# Ensure that fds 0, 1, and 2 are open. -if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi -if (exec 3>&2) ; then :; else exec 2>/dev/null; fi +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi # The user is always right. -if ${PATH_SEPARATOR+false} :; then +if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -18612,6 +19480,13 @@ if ${PATH_SEPARATOR+false} :; then } fi +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -18620,12 +19495,8 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - test -r "$as_dir$0" && as_myself=$as_dir$0 && break + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS @@ -18637,10 +19508,31 @@ if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are @@ -18651,9 +19543,9 @@ as_fn_error () as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - printf "%s\n" "$as_me: error: $2" >&2 + $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error @@ -18683,20 +19575,18 @@ as_fn_unset () { eval $1=; unset $1;} } as_unset=as_fn_unset - # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null -then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' -else $as_nop +else as_fn_append () { eval $1=\$$1\$2 @@ -18708,13 +19598,12 @@ fi # as_fn_append # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null -then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else $as_nop +else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` @@ -18744,7 +19633,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X/"$0" | +$as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -18766,9 +19655,6 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits -# Determine whether it's possible to make 'echo' print without a newline. -# These variables are no longer used directly by Autoconf, but are AC_SUBSTed -# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -18782,12 +19668,6 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac -# For backward compatibility with old third-party macros, we provide -# the shell variables $as_echo and $as_echo_n. New code should use -# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. -as_echo='printf %s\n' -as_echo_n='printf %s' - rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -18828,7 +19708,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -18837,7 +19717,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X"$as_dir" | +$as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -18897,7 +19777,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # values after options handling. ac_log=" This file was extended by $as_me, which was -generated by GNU Autoconf 2.71. Invocation command line was +generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -18958,22 +19838,21 @@ $config_commands Report bugs to the package provider." _ACEOF -ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` -ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config='$ac_cs_config_escaped' +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status -configured by $0, generated by GNU Autoconf 2.71, +configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" -Copyright (C) 2021 Free Software Foundation, Inc. +Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' test -n "\$AWK" || AWK=awk _ACEOF @@ -19005,15 +19884,15 @@ do -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - printf "%s\n" "$ac_cs_version"; exit ;; + $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) - printf "%s\n" "$ac_cs_config"; exit ;; + $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in - *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" @@ -19021,7 +19900,7 @@ do --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in - *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; @@ -19030,7 +19909,7 @@ do as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) - printf "%s\n" "$ac_cs_usage"; exit ;; + $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; @@ -19058,7 +19937,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift - \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" @@ -19072,7 +19951,7 @@ exec 5>>config.log sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX - printf "%s\n" "$ac_log" + $as_echo "$ac_log" } >&5 _ACEOF @@ -19080,6 +19959,11 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # +# Capture the value of obsolete ALL_LINGUAS because we need it to compute + # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. + OBSOLETE_ALL_LINGUAS="$ALL_LINGUAS" + # Capture the value of LINGUAS because we need it to compute CATALOGS. + LINGUAS="${LINGUAS-%UNSET%}" _ACEOF @@ -19090,7 +19974,7 @@ for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; - "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; + "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "utils/Makefile") CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;; "jwxyz/Makefile") CONFIG_FILES="$CONFIG_FILES jwxyz/Makefile" ;; @@ -19113,9 +19997,9 @@ done # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then - test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files - test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers - test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree @@ -19448,7 +20332,7 @@ do esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac - case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done @@ -19456,17 +20340,17 @@ do # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` - printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -printf "%s\n" "$as_me: creating $ac_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) - ac_sed_conf_input=`printf "%s\n" "$configure_input" | + ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac @@ -19483,7 +20367,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -printf "%s\n" X"$ac_file" | +$as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -19507,9 +20391,9 @@ printf "%s\n" X"$ac_file" | case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -19546,6 +20430,11 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 @@ -19565,8 +20454,8 @@ ac_sed_dataroot=' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' @@ -19600,6 +20489,7 @@ s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ @@ -19609,9 +20499,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 -printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" @@ -19627,34 +20517,142 @@ which seems to be undefined. Please make sure it is defined" >&2;} # if test x"$ac_file" != x-; then { - printf "%s\n" "/* $configure_input */" >&1 \ + $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else - printf "%s\n" "/* $configure_input */" >&1 \ + $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; - :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -printf "%s\n" "$as_me: executing $ac_file commands" >&6;} + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in - "default-1":C) case "$CONFIG_FILES" in *po/Makefile.in*) - sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile - esac ;; + "po-directories":C) + for ac_file in $CONFIG_FILES; do + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + # PO directories have a Makefile.in generated from Makefile.in.in. + case "$ac_file" in */Makefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + # Treat a directory as a PO directory if and only if it has a + # POTFILES.in file. This allows packages to have multiple PO + # directories under different names or in different locations. + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" + gt_tab=`printf '\t'` + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" + POMAKEFILEDEPS="POTFILES.in" + # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend + # on $ac_dir but don't depend on user-specified configuration + # parameters. + if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then + # The LINGUAS file contains the set of available languages. + if test -n "$OBSOLETE_ALL_LINGUAS"; then + test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" + fi + ALL_LINGUAS=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` + POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" + else + # The set of available languages was given in configure.in. + ALL_LINGUAS=$OBSOLETE_ALL_LINGUAS + fi + # Compute POFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) + # Compute UPDATEPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) + # Compute DUMMYPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) + # Compute GMOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) + case "$ac_given_srcdir" in + .) srcdirpre= ;; + *) srcdirpre='$(srcdir)/' ;; + esac + POFILES= + UPDATEPOFILES= + DUMMYPOFILES= + GMOFILES= + for lang in $ALL_LINGUAS; do + POFILES="$POFILES $srcdirpre$lang.po" + UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" + DUMMYPOFILES="$DUMMYPOFILES $lang.nop" + GMOFILES="$GMOFILES $srcdirpre$lang.gmo" + done + # CATALOGS depends on both $ac_dir and the user's LINGUAS + # environment variable. + INST_LINGUAS= + if test -n "$ALL_LINGUAS"; then + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "$LINGUAS"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + INST_LINGUAS="$INST_LINGUAS $presentlang" + fi + done + fi + CATALOGS= + if test -n "$INST_LINGUAS"; then + for lang in $INST_LINGUAS; do + CATALOGS="$CATALOGS $lang.gmo" + done + fi + test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" + sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" + for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do + if test -f "$f"; then + case "$f" in + *.orig | *.bak | *~) ;; + *) cat "$f" >> "$ac_dir/Makefile" ;; + esac + fi + done + fi + ;; + esac + done ;; "po/stamp-it":C) if ! grep "^# INTLTOOL_MAKEFILE$" "po/Makefile.in" > /dev/null ; then as_fn_error $? "po/Makefile.in.in was not created by intltoolize." "$LINENO" 5 @@ -19707,8 +20705,8 @@ if test "$no_create" != yes; then $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi ############################################################################### @@ -19717,6 +20715,8 @@ fi # ############################################################################### +CONF_STATUS=0 + warn_prefix_1=" Warning:" warn_prefix_2=" Note:" warn_prefix="$warn_prefix_1" @@ -19774,65 +20774,81 @@ if test "$ac_prog_cc_no_pthread" ; then warn2 "support POSIX threads." echo "" warn2 "If you have multiple CPU cores, try CC=$PTHREAD_CC." + CONF_STATUS=1 elif test "$with_pthread_req" = yes -a "$have_pthread" = no ; then warn 'POSIX threads were requested, but were not found.' + CONF_STATUS=1 fi if test "$with_sgi_req" = yes -a "$have_sgi" = no ; then warn 'The SGI saver extension was requested, but was not found.' + CONF_STATUS=1 fi if test "$with_xidle_req" = yes -a "$have_xidle" = no ; then warn 'The XIdle extension was requested, but was not found.' + CONF_STATUS=1 fi if test "$with_mit_req" = yes -a "$have_mit" = no ; then warn 'The MIT-SCREEN-SAVER extension was requested, but was not found.' + CONF_STATUS=1 fi if test "$with_xshm_req" = yes -a "$have_xshm" = no ; then warn 'The XSHM extension was requested, but was not found.' + CONF_STATUS=1 fi if test "$with_xdbe_req" = yes -a "$have_xdbe" = no ; then warn 'The DOUBLE-BUFFER extension was requested, but was not found.' + CONF_STATUS=1 fi #if test "$with_xcomposite_req" = yes -a "$have_xcomposite" = no ; then # warn 'The XCOMPOSITE extension was requested, but was not found.' +# CONF_STATUS=1 #fi if test "$with_xkb_req" = yes -a "$have_xkb" = no ; then warn 'The X Keyboard extension was requested, but was not found.' + CONF_STATUS=1 fi if test "$with_sgivc_req" = yes -a "$have_sgivc" = no ; then warn 'The SGI-VIDEO-CONTROL extension was requested, but was not found.' + CONF_STATUS=1 fi if test "$with_dpms_req" = yes -a "$have_dpms" = no ; then warn 'The DPMS extension was requested, but was not found.' + CONF_STATUS=1 fi if test "$with_xinerama_req" = yes -a "$have_xinerama" = no ; then warn 'The Xinerama extension was requested, but was not found.' + CONF_STATUS=1 fi if test "$with_xf86vmode_req" = yes -a "$have_xf86vmode" = no ; then warn 'The XF86VMODE extension was requested, but was not found.' + CONF_STATUS=1 fi if test "$with_randr_req" = yes -a "$have_randr" = no ; then warn 'The RANDR extension was requested, but was not found.' + CONF_STATUS=1 fi if test "$with_proc_interrupts_req" = yes -a "$have_proc_interrupts" = no; then warn "Checking of /proc/interrupts was requested, but it's bogus." + CONF_STATUS=1 fi if test "$pkg_config" = false ; then warnL 'The "pkg-config" program was not found. Without that,' warn2 "detection of the various GTK libraries won't work." + CONF_STATUS=1 else pkgerr=`$pkg_config --list-all 2>&1 >/dev/null` if test "x$pkgerr" != "x" ; then @@ -19841,20 +20857,27 @@ else warn2 "The errors are:" echo '' echo "$pkgerr" | sed 's/^/ > /g' + CONF_STATUS=1 fi fi if test "$gtk_halfassed" != no ; then - warnL "GTK was found, but $gtk_halfassed_lib was not, so GTK can't be used." + warnL "GTK was found, but $gtk_halfassed_lib was not, so GTK" + warn2 "can't be used." + CONF_STATUS=1 + + if ( echo $gtk_halfassed_lib | grep -qi pixbuf-xlib ); then + echo '' + warn2 "Recently, some distros have stopped distributing" + warn2 "gdk-pixbuf-xlib entirely. So good luck with that." + fi + fi motif_warn2() { - warn2 'Though the Motif front-end to xscreensaver is still' - warn2 'maintained, it is no longer being updated with new' - warn2 'features: all new development on the xscreensaver-settings' - warn2 'program is happening in the GTK version, and not in the' - warn2 'Motif version. It is recommended that you build against' - warn2 'GTK instead of Motif. See .' + warn2 "The Motif version of \`xscreensaver-settings' is missing many" + warn2 'features. It is strongly recommended that you build the GTK' + warn2 'version instead.' } if test "$have_motif" = no -a "$have_gtk" = no; then @@ -19864,9 +20887,11 @@ if test "$have_motif" = no -a "$have_gtk" = no; then warn2 "\`xscreensaver-settings' program requires one of these." echo '' motif_warn2 + CONF_STATUS=1 else warnL "The GTK libraries do not seem to be available; the" warn2 "\`xscreensaver-settings' program requires them." + CONF_STATUS=1 # echo '' # warn2 'You can use Motif or Lesstif instead of GTK (use the' # warn2 "\`--with-motif' option) but that is NOT recommended." @@ -19876,19 +20901,23 @@ if test "$have_motif" = no -a "$have_gtk" = no; then elif test "$with_motif_req" = yes -a "$have_motif" = no ; then warnL "Use of Motif was requested, but it wasn't found;" warn2 "Gtk will be used instead." + CONF_STATUS=1 elif test "$with_gtk_req" = yes -a "$have_gtk" = no ; then warnL "Use of Gtk was requested, but it wasn't found." + CONF_STATUS=1 fi if test "$ac_cv_libxt" != yes ; then warnL 'The Xt library was not found. It is required.' + CONF_STATUS=1 fi if test "$have_gtk" = yes -a "$have_gdk_pixbuf" = no ; then warn "GTK is being used, but the GDK-Pixbuf library and/or" warn2 "headers were not found. That can't be good. Please" warn2 "install the GDK-Pixbuf development kit and re-configure." + CONF_STATUS=1 fi if test "$have_motif" = yes -a "$have_lesstif" = yes ; then @@ -19906,6 +20935,7 @@ if test "$have_motif" = yes -a "$have_lesstif" = yes ; then warn2 "use with XScreenSaver; it is strongly recommended" warn2 "that you upgrade to at least version $preferred_lesstif!" warn2 "See ." + CONF_STATUS=1 fi fi @@ -19923,6 +20953,7 @@ halfassery() { if test "$with_gdk_pixbuf_req" = yes -a "$have_gdk_pixbuf" = no; then warnL 'Use of GDK-Pixbuf was requested, but it was not found.' + CONF_STATUS=1 fi if test "$have_gdk_pixbuf" = no -o "$gdk_pixbuf_halfassed" = yes || \ @@ -19951,6 +20982,7 @@ fi if test "$have_jpeg" = no ; then if test "$with_jpeg_req" = yes ; then warnL 'Use of libjpeg was requested, but it was not found.' + CONF_STATUS=1 elif test "$with_jpeg_req" = no ; then warnL 'The JPEG library is not being used.' else @@ -19963,6 +20995,7 @@ if test "$have_jpeg" = no ; then warn2 "This means that it won't be possible for the image-manipulating" warn2 "display modes to load files from disk; and it also means that" warn2 "the \`webcollage' program will be much slower." + CONF_STATUS=1 else warn2 "This means the \`webcollage' program will be much slower." fi @@ -19971,6 +21004,7 @@ fi if test "$have_png" = no ; then if test "$with_png_req" = yes ; then warnL 'Use of libpng was requested, but it was not found.' + CONF_STATUS=1 elif test "$with_png_req" = no ; then warnL 'The PNG library is not being used.' else @@ -19979,16 +21013,19 @@ if test "$have_png" = no ; then if test "$png_halfassed" = yes ; then halfassery ; fi warn2 "Many things aren't going to work right." + CONF_STATUS=1 fi if test "$have_xinput" = no ; then warnL 'The XInput2 library was not found. It is required.' if test "$xinput_halfassed" = yes ; then halfassery ; else echo '' ; fi + CONF_STATUS=1 fi if test "$have_xft" = no ; then warnL 'The XFreeType library was not found. It is required.' if test "$xft_halfassed" = yes ; then halfassery ; else echo '' ; fi + CONF_STATUS=1 fi if test "$have_systemd" = no ; then @@ -19996,9 +21033,11 @@ if test "$have_systemd" = no ; then if test "$systemd_too_old" = yes ; then warnL "The systemd library is too old." systemd_warned=yes + CONF_STATUS=1 elif test "$with_systemd_req" = yes ; then warnL "Use of systemd was requested, but it was not found." systemd_warned=yes + CONF_STATUS=1 elif test "$ac_macosx" = yes; then true elif test "$with_systemd_req" = no ; then @@ -20012,6 +21051,7 @@ if test "$have_systemd" = no ; then if test "$systemd_halfassed" = yes ; then halfassery systemd_warned=yes + CONF_STATUS=1 fi if test "$systemd_warned" = yes; then @@ -20026,10 +21066,13 @@ fi if test "$have_gl" = no ; then if test "$with_gl_req" = yes ; then warnL 'Use of GL was requested, but it was not found.' + CONF_STATUS=1 elif test "$with_gl_req" = no ; then noteL 'The OpenGL 3D library is not being used.' + CONF_STATUS=1 else noteL 'The OpenGL 3D library was not found.' + CONF_STATUS=1 fi if test "$gl_halfassed" = yes ; then @@ -20042,9 +21085,7 @@ if test "$have_gl" = no ; then echo '' warn2 'Those demos which use 3D will not be built or installed.' - warn2 'You might want to consider installing OpenGL and' - warn2 're-running configure.' - + warn2 'That is most of them.' fi if test "$have_gl" = yes -a "$have_gle" = no ; then @@ -20057,6 +21098,7 @@ if test "$have_gl" = yes -a "$have_gle" = no ; then noteL 'Use of the GLE (GL Extrusion) library was requested, but' warn2 'it was not found (though the OpenGL library was found, and' warn2 'is being used.)' + CONF_STATUS=1 elif test "$with_gle_req" = no ; then noteL 'The OpenGL Library is being used, but the GLE (GL Extrusion)' warn2 'library is not.' @@ -20078,28 +21120,33 @@ fi if test "$with_readdisplay_req" = yes -a "$have_readdisplay" = no ; then warn 'Use of XReadDisplay was requested, but it was not found.' + CONF_STATUS=1 fi if test "$with_kerberos_req" = yes -a "$have_kerberos" = no ; then warn 'Use of Kerberos was requested, but it was not found.' + CONF_STATUS=1 fi if test "$with_pam_req" = yes -a "$have_pam" = no ; then warn 'Use of PAM was requested, but it was not found.' + CONF_STATUS=1 elif test "$have_pam" = no ; then if test -d /etc/pam.d -o -f /etc/pam.conf ; then warn "Your system seems to have PAM, but PAM is not being used." warn2 "That is probably not going to work out well." - + CONF_STATUS=1 fi fi if test "$with_shadow_req" = yes -a "$have_shadow" = no ; then warn 'Use of shadow passwords was requested, but they were not found.' + CONF_STATUS=1 fi if test "$setcap_hacks_req" = yes -a "$have_libcap" = no ; then warn 'Use of libcap was requested, but it was not found.' + CONF_STATUS=1 fi if test "$ac_macosx" = yes -a "$enable_locking" = yes ; then @@ -20245,3 +21292,4 @@ echo " Extra Fonts: ${FONT_DIR}$fontdir_err" echo " App Defaults: ${APPDEFAULTS}/$addir_err" echo "" +exit $CONF_STATUS diff --git a/configure.ac b/configure.ac index a9359643..c4fd38fd 100644 --- a/configure.ac +++ b/configure.ac @@ -1,9 +1,18 @@ -# configure.in --- xscreensaver, Copyright © 1997-2021 Jamie Zawinski. +# configure.in --- xscreensaver, Copyright © 1997-2022 Jamie Zawinski. # -# Note: upgrading past 2.69_5 breaks the world. +# Note: upgrading past 2.69_5 breaks the world, mostly the po/ shitshow. AC_PREREQ([2.69]) +# If you accidentally upgraded autoconf, re-install the 2019-08-23 version: +# +# git clone --single-branch https://github.com/macports/macports-ports.git +# cd macports-ports/ +# git checkout 1d802b48a7b00b6c154e971119a2a309550c79c2 +# cd devel/autoconf +# sudo port install +# port installed autoconf + AC_INIT AC_CONFIG_SRCDIR([driver/subprocs.c]) AC_CONFIG_HEADERS([config.h]) @@ -274,9 +283,6 @@ AH_TEMPLATE([HAVE_ADJUNCT_PASSWD], AH_TEMPLATE([HAVE_HPUX_PASSWD], [Define this for HPUX so-called "Secure Passwords".]) -#AH_TEMPLATE([PASSWD_HELPER_PROGRAM], -# [Define this to use a third-party password helper program.]) - AH_TEMPLATE([HAVE_SYSLOG], [Define this if you have openlog/syslog/closelog.]) @@ -1185,9 +1191,19 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", AC_SUBST(GETTEXT_PACKAGE) ALL_LINGUAS="da de es et fi fr hu it ja ko nb nl pl pt pt_BR ru sk sv vi wa zh_CN zh_TW" -AM_GLIB_GNU_GETTEXT +AM_GNU_GETTEXT([external]) MKINSTALLDIRS="$INSTALL_DIRS" +# The library is there, but neither $INTLLIBS nor $LIBINTL are getting set. +if test -z "$INTLLIBS" ; then INTLLIBS="$LIBINTL" ; fi +if test -z "$INTLLIBS" ; then + AC_CHECK_X_LIB(intl, gettext, [INTLLIBS="-lintl"]) +fi +LIBINTL="$INTLLIBS" +AC_SUBST(INTLLIBS) +AC_SUBST(LIBINTL) +AC_SUBST(CATALOGS) + ############################################################################### # @@ -2709,47 +2725,6 @@ if test "$enable_locking" = yes ; then fi -############################################################################### -# -# Strongly suspect that this hasn't been used in years. Also, the same -# goal is achieved by xscreensaver-auth in XScreenSaver 6. -- jwz, 2021 -# -# Check for external password helper -# On SuSE in 1993, instead of having xscreensaver be a setuid program, -# they fork an external program that takes the password on stdin, and -# returns true if that password is a valid one. Then only that smaller -# program needs to be setuid. -# -# (Note that this external program is not a GUI: the GUI is still -# all in xscreensaver itself; the external program just does auth.) -# -############################################################################### - -#have_passwd_helper=no -#with_passwd_helper_req=unspecified -# -#AC_ARG_WITH(passwd-helper, -#[ --with-passwd-helper Include support for external password verification.], -# [with_passwd_helper="$withval"; with_passwd_helper_req="$withval"],[with_passwd_helper=no]) -## no HANDLE_X_PATH_ARG for this one -# -#if test "$enable_locking" = no ; then -# with_passwd_helper_req=no -# with_passwd_helper=no -#fi -# -#case "$with_passwd_helper" in -# ""|no) : ;; -# /*) -# AC_DEFINE_UNQUOTED(PASSWD_HELPER_PROGRAM, "$with_passwd_helper") -# have_passwd_helper=yes;; -# *) -# echo "error: --with-passwd-helper needs full pathname of helper (not '$with_passwd_helper')." >&2 -# exit 1 -#esac - - - # Most of the above shadow mechanisms will have set setuid_auth to yes, # if they were found. But, on some systems, we need setuid even when # using plain old vanilla passwords. @@ -4117,7 +4092,7 @@ fi if test "$record_anim" = yes; then if test "$have_gdk_pixbuf" != yes; then - AC_MSG_ERROR(--with-record-animation requires GDK-Pixbuf) + AC_MSG_WARN(--with-record-animation requires GDK-Pixbuf) else AC_MSG_RESULT(enabling --with-record-animation) AC_DEFINE(HAVE_RECORD_ANIM) @@ -4174,12 +4149,8 @@ if test "$enable_pam_check_account_type" = yes; then else COMMENT_PAM_CHECK_ACCOUNT="#" fi -#if test "$have_passwd_helper" = yes; then -# PASSWD_SRCS="$PASSWD_SRCS \$(PWHELPER_SRCS)" -# PASSWD_OBJS="$PASSWD_OBJS \$(PWHELPER_OBJS)" -#fi - PASSWD_SRCS="$PASSWD_SRCS \$(PWENT_SRCS)" - PASSWD_OBJS="$PASSWD_OBJS \$(PWENT_OBJS)" +PASSWD_SRCS="$PASSWD_SRCS \$(PWENT_SRCS)" +PASSWD_OBJS="$PASSWD_OBJS \$(PWENT_OBJS)" if test "$enable_locking" = yes; then @@ -4401,6 +4372,8 @@ AC_OUTPUT # ############################################################################### +CONF_STATUS=0 + warn_prefix_1=" Warning:" warn_prefix_2=" Note:" warn_prefix="$warn_prefix_1" @@ -4459,65 +4432,81 @@ if test "$ac_prog_cc_no_pthread" ; then warn2 "support POSIX threads." echo "" warn2 "If you have multiple CPU cores, try CC=$PTHREAD_CC." + CONF_STATUS=1 elif test "$with_pthread_req" = yes -a "$have_pthread" = no ; then warn 'POSIX threads were requested, but were not found.' + CONF_STATUS=1 fi if test "$with_sgi_req" = yes -a "$have_sgi" = no ; then warn 'The SGI saver extension was requested, but was not found.' + CONF_STATUS=1 fi if test "$with_xidle_req" = yes -a "$have_xidle" = no ; then warn 'The XIdle extension was requested, but was not found.' + CONF_STATUS=1 fi if test "$with_mit_req" = yes -a "$have_mit" = no ; then warn 'The MIT-SCREEN-SAVER extension was requested, but was not found.' + CONF_STATUS=1 fi if test "$with_xshm_req" = yes -a "$have_xshm" = no ; then warn 'The XSHM extension was requested, but was not found.' + CONF_STATUS=1 fi if test "$with_xdbe_req" = yes -a "$have_xdbe" = no ; then warn 'The DOUBLE-BUFFER extension was requested, but was not found.' + CONF_STATUS=1 fi #if test "$with_xcomposite_req" = yes -a "$have_xcomposite" = no ; then # warn 'The XCOMPOSITE extension was requested, but was not found.' +# CONF_STATUS=1 #fi if test "$with_xkb_req" = yes -a "$have_xkb" = no ; then warn 'The X Keyboard extension was requested, but was not found.' + CONF_STATUS=1 fi if test "$with_sgivc_req" = yes -a "$have_sgivc" = no ; then warn 'The SGI-VIDEO-CONTROL extension was requested, but was not found.' + CONF_STATUS=1 fi if test "$with_dpms_req" = yes -a "$have_dpms" = no ; then warn 'The DPMS extension was requested, but was not found.' + CONF_STATUS=1 fi if test "$with_xinerama_req" = yes -a "$have_xinerama" = no ; then warn 'The Xinerama extension was requested, but was not found.' + CONF_STATUS=1 fi if test "$with_xf86vmode_req" = yes -a "$have_xf86vmode" = no ; then warn 'The XF86VMODE extension was requested, but was not found.' + CONF_STATUS=1 fi if test "$with_randr_req" = yes -a "$have_randr" = no ; then warn 'The RANDR extension was requested, but was not found.' + CONF_STATUS=1 fi if test "$with_proc_interrupts_req" = yes -a "$have_proc_interrupts" = no; then warn "Checking of /proc/interrupts was requested, but it's bogus." + CONF_STATUS=1 fi if test "$pkg_config" = false ; then warnL 'The "pkg-config" program was not found. Without that,' warn2 "detection of the various GTK libraries won't work." + CONF_STATUS=1 else pkgerr=`$pkg_config --list-all 2>&1 >/dev/null` if test "x$pkgerr" != "x" ; then @@ -4526,20 +4515,27 @@ else warn2 "The errors are:" echo '' echo "$pkgerr" | sed 's/^/ > /g' + CONF_STATUS=1 fi fi if test "$gtk_halfassed" != no ; then - warnL "GTK was found, but $gtk_halfassed_lib was not, so GTK can't be used." + warnL "GTK was found, but $gtk_halfassed_lib was not, so GTK" + warn2 "can't be used." + CONF_STATUS=1 + + if ( echo $gtk_halfassed_lib | grep -qi pixbuf-xlib ); then + echo '' + warn2 "Recently, some distros have stopped distributing" + warn2 "gdk-pixbuf-xlib entirely. So good luck with that." + fi + fi motif_warn2() { - warn2 'Though the Motif front-end to xscreensaver is still' - warn2 'maintained, it is no longer being updated with new' - warn2 'features: all new development on the xscreensaver-settings' - warn2 'program is happening in the GTK version, and not in the' - warn2 'Motif version. It is recommended that you build against' - warn2 'GTK instead of Motif. See .' + warn2 "The Motif version of \`xscreensaver-settings' is missing many" + warn2 'features. It is strongly recommended that you build the GTK' + warn2 'version instead.' } if test "$have_motif" = no -a "$have_gtk" = no; then @@ -4549,9 +4545,11 @@ if test "$have_motif" = no -a "$have_gtk" = no; then warn2 "\`xscreensaver-settings' program requires one of these." echo '' motif_warn2 + CONF_STATUS=1 else warnL "The GTK libraries do not seem to be available; the" warn2 "\`xscreensaver-settings' program requires them." + CONF_STATUS=1 # echo '' # warn2 'You can use Motif or Lesstif instead of GTK (use the' # warn2 "\`--with-motif' option) but that is NOT recommended." @@ -4561,20 +4559,24 @@ if test "$have_motif" = no -a "$have_gtk" = no; then elif test "$with_motif_req" = yes -a "$have_motif" = no ; then warnL "Use of Motif was requested, but it wasn't found;" warn2 "Gtk will be used instead." + CONF_STATUS=1 elif test "$with_gtk_req" = yes -a "$have_gtk" = no ; then warnL "Use of Gtk was requested, but it wasn't found." + CONF_STATUS=1 fi if test "$ac_cv_libxt" != yes ; then warnL 'The Xt library was not found. It is required.' + CONF_STATUS=1 fi if test "$have_gtk" = yes -a "$have_gdk_pixbuf" = no ; then warn "GTK is being used, but the GDK-Pixbuf library and/or" warn2 "headers were not found. That can't be good. Please" warn2 "install the GDK-Pixbuf development kit and re-configure." + CONF_STATUS=1 fi if test "$have_motif" = yes -a "$have_lesstif" = yes ; then @@ -4592,6 +4594,7 @@ if test "$have_motif" = yes -a "$have_lesstif" = yes ; then warn2 "use with XScreenSaver; it is strongly recommended" warn2 "that you upgrade to at least version $preferred_lesstif!" warn2 "See ." + CONF_STATUS=1 fi fi @@ -4610,6 +4613,7 @@ halfassery() { if test "$with_gdk_pixbuf_req" = yes -a "$have_gdk_pixbuf" = no; then warnL 'Use of GDK-Pixbuf was requested, but it was not found.' + CONF_STATUS=1 fi if test "$have_gdk_pixbuf" = no -o "$gdk_pixbuf_halfassed" = yes || \ @@ -4639,6 +4643,7 @@ fi if test "$have_jpeg" = no ; then if test "$with_jpeg_req" = yes ; then warnL 'Use of libjpeg was requested, but it was not found.' + CONF_STATUS=1 elif test "$with_jpeg_req" = no ; then warnL 'The JPEG library is not being used.' else @@ -4651,6 +4656,7 @@ if test "$have_jpeg" = no ; then warn2 "This means that it won't be possible for the image-manipulating" warn2 "display modes to load files from disk; and it also means that" warn2 "the \`webcollage' program will be much slower." + CONF_STATUS=1 else warn2 "This means the \`webcollage' program will be much slower." fi @@ -4660,6 +4666,7 @@ fi if test "$have_png" = no ; then if test "$with_png_req" = yes ; then warnL 'Use of libpng was requested, but it was not found.' + CONF_STATUS=1 elif test "$with_png_req" = no ; then warnL 'The PNG library is not being used.' else @@ -4668,18 +4675,21 @@ if test "$have_png" = no ; then if test "$png_halfassed" = yes ; then halfassery ; fi warn2 "Many things aren't going to work right." + CONF_STATUS=1 fi if test "$have_xinput" = no ; then warnL 'The XInput2 library was not found. It is required.' if test "$xinput_halfassed" = yes ; then halfassery ; else echo '' ; fi + CONF_STATUS=1 fi if test "$have_xft" = no ; then warnL 'The XFreeType library was not found. It is required.' if test "$xft_halfassed" = yes ; then halfassery ; else echo '' ; fi + CONF_STATUS=1 fi @@ -4688,9 +4698,11 @@ if test "$have_systemd" = no ; then if test "$systemd_too_old" = yes ; then warnL "The systemd library is too old." systemd_warned=yes + CONF_STATUS=1 elif test "$with_systemd_req" = yes ; then warnL "Use of systemd was requested, but it was not found." systemd_warned=yes + CONF_STATUS=1 elif test "$ac_macosx" = yes; then true elif test "$with_systemd_req" = no ; then @@ -4704,6 +4716,7 @@ if test "$have_systemd" = no ; then if test "$systemd_halfassed" = yes ; then halfassery systemd_warned=yes + CONF_STATUS=1 fi if test "$systemd_warned" = yes; then @@ -4719,10 +4732,13 @@ fi if test "$have_gl" = no ; then if test "$with_gl_req" = yes ; then warnL 'Use of GL was requested, but it was not found.' + CONF_STATUS=1 elif test "$with_gl_req" = no ; then noteL 'The OpenGL 3D library is not being used.' + CONF_STATUS=1 else noteL 'The OpenGL 3D library was not found.' + CONF_STATUS=1 fi if test "$gl_halfassed" = yes ; then @@ -4735,9 +4751,7 @@ if test "$have_gl" = no ; then echo '' warn2 'Those demos which use 3D will not be built or installed.' - warn2 'You might want to consider installing OpenGL and' - warn2 're-running configure.' - + warn2 'That is most of them.' fi if test "$have_gl" = yes -a "$have_gle" = no ; then @@ -4750,6 +4764,7 @@ if test "$have_gl" = yes -a "$have_gle" = no ; then noteL 'Use of the GLE (GL Extrusion) library was requested, but' warn2 'it was not found (though the OpenGL library was found, and' warn2 'is being used.)' + CONF_STATUS=1 elif test "$with_gle_req" = no ; then noteL 'The OpenGL Library is being used, but the GLE (GL Extrusion)' warn2 'library is not.' @@ -4772,28 +4787,33 @@ fi if test "$with_readdisplay_req" = yes -a "$have_readdisplay" = no ; then warn 'Use of XReadDisplay was requested, but it was not found.' + CONF_STATUS=1 fi if test "$with_kerberos_req" = yes -a "$have_kerberos" = no ; then warn 'Use of Kerberos was requested, but it was not found.' + CONF_STATUS=1 fi if test "$with_pam_req" = yes -a "$have_pam" = no ; then warn 'Use of PAM was requested, but it was not found.' + CONF_STATUS=1 elif test "$have_pam" = no ; then if test -d /etc/pam.d -o -f /etc/pam.conf ; then warn "Your system seems to have PAM, but PAM is not being used." warn2 "That is probably not going to work out well." - + CONF_STATUS=1 fi fi if test "$with_shadow_req" = yes -a "$have_shadow" = no ; then warn 'Use of shadow passwords was requested, but they were not found.' + CONF_STATUS=1 fi if test "$setcap_hacks_req" = yes -a "$have_libcap" = no ; then warn 'Use of libcap was requested, but it was not found.' + CONF_STATUS=1 fi if test "$ac_macosx" = yes -a "$enable_locking" = yes ; then @@ -4942,3 +4962,5 @@ echo " Configuration: ${HACK_CONF_DIR}/$confdir_err" echo " Extra Fonts: ${FONT_DIR}$fontdir_err" echo " App Defaults: ${APPDEFAULTS}/$addir_err" echo "" + +exit $CONF_STATUS diff --git a/driver/Makefile.in b/driver/Makefile.in index baa1eb6b..10061c2a 100644 --- a/driver/Makefile.in +++ b/driver/Makefile.in @@ -1,4 +1,4 @@ -# driver/Makefile.in --- xscreensaver, Copyright © 1997-2021 Jamie Zawinski. +# driver/Makefile.in --- xscreensaver, Copyright © 1997-2022 Jamie Zawinski. # the `../configure' script generates `driver/Makefile' from this file. @SET_MAKE@ @@ -134,9 +134,6 @@ KERBEROS_OBJS = passwd-kerberos.o PAM_SRCS = passwd-pam.c PAM_OBJS = passwd-pam.o -PWHELPER_SRCS = passwd-helper.c -PWHELPER_OBJS = passwd-helper.o - PASSWD_SRCS = @PASSWD_SRCS@ PASSWD_OBJS = @PASSWD_OBJS@ @@ -234,7 +231,7 @@ EXTRAS = README Makefile.in \ TARFILES = $(DAEMON_SRCS) $(GFX_SRCS) $(AUTH_SRCS) $(SYSTEMD_SRCS) \ $(CMD_SRCS) $(GTK_SRCS) $(MOTIF_SRCS) $(PWENT_SRCS) \ - $(PWHELPER_SRCS) $(KERBEROS_SRCS) $(PAM_SRCS) \ + $(KERBEROS_SRCS) $(PAM_SRCS) \ $(HDRS) $(MENA) $(MENB) $(TEST_SRCS) $(EXTRAS) default: $(EXES) $(UTIL_EXES) $(SETUID_EXES) @@ -687,7 +684,7 @@ distdepend: check_men update_ad_version XScreenSaver_ad.h XScreenSaver_Xm_ad.h -s '# DO NOT DELETE: updated by make distdepend' $(DEPEND_FLAGS) -- \ $(INCLUDES_1) $(DEFS) $(DEPEND_DEFINES) $(CFLAGS) $(X_CFLAGS) -- \ $(SAVER_SRCS_1) $(SYSTEMD_SRCS) $(MOTIF_SRCS) $(GTK_SRCS) \ - $(PWENT_SRCS) $(PWHELPER_SRCS) $(KERBEROS_SRCS) $(PAM_SRCS) \ + $(PWENT_SRCS) $(KERBEROS_SRCS) $(PAM_SRCS) \ $(LOCK_SRCS_1) $(DEMO_SRCS_1) $(CMD_SRCS) \ $(TEST_SRCS) 2>/dev/null | \ sort -d | \ @@ -915,10 +912,14 @@ XScreenSaver_Xm_ad.h:: # Replace this with @INTLTOOL_DESKTOP_RULE@ once # https://bugs.launchpad.net/intltool/+bug/1749904 is fixed. -.desktop.in.desktop: $(INTLTOOL_MERGE) $(top_srcdir)/po/*.po - $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) \ - $(INTLTOOL_V_MERGE_OPTIONS) -d -u \ - -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +# gmake 4.3: "warning: ignoring prerequisites on suffix rule definition" +#.desktop.in.desktop: $(INTLTOOL_MERGE) $(top_srcdir)/po/*.po +# $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) \ +# $(INTLTOOL_V_MERGE_OPTIONS) -d -u \ +# -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +# Feb 2022: is it fixed yet? Let's find out. +@INTLTOOL_DESKTOP_RULE@ + ############################################################################## @@ -1020,9 +1021,6 @@ demo-Xm.o: $(UTILS_SRC)/version.h demo-Xm.o: $(UTILS_SRC)/visual.h demo-Xm.o: $(UTILS_SRC)/xmu.h demo-Xm-widgets.o: ../config.h -passwd-helper.o: $(srcdir)/auth.h -passwd-helper.o: $(srcdir)/blurb.h -passwd-helper.o: ../config.h passwd-kerberos.o: $(srcdir)/auth.h passwd-kerberos.o: $(srcdir)/blurb.h passwd-kerberos.o: ../config.h @@ -1063,7 +1061,6 @@ test-xdpms.o: $(srcdir)/blurb.h test-xdpms.o: ../config.h test-xinerama.o: $(srcdir)/blurb.h test-xinerama.o: ../config.h -test-xinput.o: $(srcdir)/blurb.h test-xinput.o: ../config.h test-xinput.o: $(srcdir)/xinput.h test-xkb.o: $(srcdir)/blurb.h diff --git a/driver/XScreenSaver.ad.in b/driver/XScreenSaver.ad.in index aea59689..8c53a7df 100644 --- a/driver/XScreenSaver.ad.in +++ b/driver/XScreenSaver.ad.in @@ -4,8 +4,8 @@ ! a screen saver and locker for the X window system ! by Jamie Zawinski ! -! version 6.02 -! 11-Oct-2021 +! version 6.03 +! 27-Feb-2022 ! ! See "man xscreensaver" for more info. The latest version is always ! available at https://www.jwz.org/xscreensaver/ @@ -362,7 +362,7 @@ XScreenSaver.bourneShell: /bin/sh munch -root \n\ penrose -root \n\ @GL_KLUDGE@ GL: pipes -root \n\ - rd-bomb -root \n\ + rdbomb -root \n\ @GL_KLUDGE@ GL: rubik -root \n\ - sierpinski -root \n\ slip -root \n\ @@ -567,7 +567,9 @@ XScreenSaver.bourneShell: /bin/sh @GL_KLUDGE@ GL: headroom -root \n\ @GL_KLUDGE@ GL: sphereeversion -root \n\ binaryhorizon -root \n\ - marbling -root \n + marbling -root \n\ +@GL_KLUDGE@ GL: mapscroller -root \n\ +@GL_KLUDGE@ GL: squirtorus -root \n @@ -644,6 +646,7 @@ XScreenSaver.bourneShell: /bin/sh *hacks.lcdscrub.name: LCD Scrub *hacks.lmorph.name: LMorph *hacks.m6502.name: m6502 +*hacks.mapscroller.name: Map Scroller *hacks.maze3d.name: Maze 3D *hacks.memscroller.name: Mem Scroller *hacks.metaballs.name: Meta Balls @@ -662,8 +665,7 @@ XScreenSaver.bourneShell: /bin/sh *hacks.quasicrystal.name: Quasi-Crystal *hacks.raverhoop.name: Raver Hoop *hacks.razzledazzle.name: Razzle Dazzle -*hacks.rd-bomb.name: RD-Bomb -*hacks.rd-bomb.name: RD-Bomb +*hacks.rdbomb.name: RD-Bomb *hacks.romanboy.name: Roman Boy *hacks.rotzoomer.name: Rot Zoomer *hacks.rubikblocks.name: Rubik Blocks diff --git a/driver/XScreenSaver_ad.h b/driver/XScreenSaver_ad.h index 64815d95..7dcd66b4 100644 --- a/driver/XScreenSaver_ad.h +++ b/driver/XScreenSaver_ad.h @@ -36,10 +36,9 @@ "*textURL: https://en.wikipedia.org/w/index.php?title=Special:NewPages&feed=rss", "*demoCommand: xscreensaver-settings", "*helpURL: https://www.jwz.org/xscreensaver/man.html", -"*loadURL: gnome-open '%s'", -"*manualCommand: yelp man:%s || \ - x-terminal-emulator -t '%s manual' \ - -e /bin/sh -c \"man %s; read foo\"", +"*loadURL: x-www-browser '%s' || firefox '%s' || chromium-browser '%s'", +"*manualCommand: xterm -sb -fg black -bg gray75 -T '%s manual' \ + -e /bin/sh -c 'man \"%s\" ; read foo'", "*dateFormat: %I:%M %p, %a %b %e", "*newLoginCommand: no-such-login-manager", "XScreenSaver.pointerHysteresis: 10", @@ -217,7 +216,7 @@ munch -root \\n\ penrose -root \\n\ GL: pipes -root \\n\ - rd-bomb -root \\n\ + rdbomb -root \\n\ GL: rubik -root \\n\ - sierpinski -root \\n\ slip -root \\n\ @@ -253,7 +252,7 @@ compass -root \\n\ deluxe -root \\n\ - demon -root \\n\ - GL: extrusion -root \\n\ +- GL: extrusion -root \\n\ - loop -root \\n\ penetrate -root \\n\ petri -root \\n\ @@ -422,7 +421,9 @@ GL: headroom -root \\n\ GL: sphereeversion -root \\n\ binaryhorizon -root \\n\ - marbling -root \\n", + marbling -root \\n\ + GL: mapscroller -root \\n\ + GL: squirtorus -root \\n", "*hacks.antinspect.name: Ant Inspect", "*hacks.antmaze.name: Ant Maze", "*hacks.antspotlight.name: Ant Spotlight", @@ -489,6 +490,7 @@ "*hacks.lcdscrub.name: LCD Scrub", "*hacks.lmorph.name: LMorph", "*hacks.m6502.name: m6502", +"*hacks.mapscroller.name: Map Scroller", "*hacks.maze3d.name: Maze 3D", "*hacks.memscroller.name: Mem Scroller", "*hacks.metaballs.name: Meta Balls", @@ -507,8 +509,7 @@ "*hacks.quasicrystal.name: Quasi-Crystal", "*hacks.raverhoop.name: Raver Hoop", "*hacks.razzledazzle.name: Razzle Dazzle", -"*hacks.rd-bomb.name: RD-Bomb", -"*hacks.rd-bomb.name: RD-Bomb", +"*hacks.rdbomb.name: RD-Bomb", "*hacks.romanboy.name: Roman Boy", "*hacks.rotzoomer.name: Rot Zoomer", "*hacks.rubikblocks.name: Rubik Blocks", diff --git a/driver/auth.h b/driver/auth.h index 40594eaa..80a49bae 100644 --- a/driver/auth.h +++ b/driver/auth.h @@ -1,5 +1,5 @@ /* auth.h --- Providing authentication mechanisms. - * Copyright © 1993-2021 Jamie Zawinski + * Copyright © 1993-2022 Jamie Zawinski * (c) 2007, Quest Software, Inc. All rights reserved. * This file is part of XScreenSaver. * @@ -85,7 +85,7 @@ extern Bool xscreensaver_auth_conv (void *closure, const auth_message *msg, auth_response **resp); extern void xscreensaver_auth_finished (void *closure, Bool authenticated_p); -extern void xscreensaver_splash (void *root_widget); +extern void xscreensaver_splash (void *root_widget, Bool disable_settings_p); #endif /* __XSCREENSAVER_AUTH_H__ */ diff --git a/driver/clientmsg.c b/driver/clientmsg.c index c9557ad7..f407590b 100644 --- a/driver/clientmsg.c +++ b/driver/clientmsg.c @@ -44,14 +44,14 @@ find_screensaver_window (Display *dpy, char **version) XSync (dpy, False); old_handler = XSetErrorHandler (error_handler); + if (version) *version = 0; + for (screen = 0; screen < nscreens; screen++) { Window root = RootWindow (dpy, screen); Window root2, parent, *kids; unsigned int nkids; - if (version) *version = 0; - if (! XQueryTree (dpy, root, &root2, &parent, &kids, &nkids)) abort (); if (root != root2) @@ -94,6 +94,7 @@ find_screensaver_window (Display *dpy, char **version) if (ret) break; } if (kids) XFree (kids); + if (ret) break; } XSetErrorHandler (old_handler); diff --git a/driver/demo-Gtk-conf.c b/driver/demo-Gtk-conf.c index 6d042150..93340a0d 100644 --- a/driver/demo-Gtk-conf.c +++ b/driver/demo-Gtk-conf.c @@ -66,6 +66,7 @@ # pragma GCC diagnostic ignored "-Wlong-long" # pragma GCC diagnostic ignored "-Wvariadic-macros" # pragma GCC diagnostic ignored "-Wpedantic" +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" #endif #include diff --git a/driver/demo-Gtk.c b/driver/demo-Gtk.c index 96b644d2..04d30208 100644 --- a/driver/demo-Gtk.c +++ b/driver/demo-Gtk.c @@ -1,5 +1,5 @@ /* demo-Gtk.c --- implements the interactive demo-mode and options dialogs. - * xscreensaver, Copyright © 1993-2021 Jamie Zawinski + * xscreensaver, Copyright © 1993-2022 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -76,6 +76,7 @@ # pragma GCC diagnostic ignored "-Wlong-long" # pragma GCC diagnostic ignored "-Wvariadic-macros" # pragma GCC diagnostic ignored "-Wpedantic" +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" #endif #include @@ -661,6 +662,10 @@ run_cmd (state *s, Atom command, int arg) int status; flush_dialog_changes_and_save (s); + + if (s->debug_p) + fprintf (stderr, "%s: command: %s %d\n", blurb(), + XGetAtomName (GDK_DISPLAY(), command), arg); status = xscreensaver_command (GDK_DISPLAY(), command, arg, False, &err); /* Kludge: ignore the spurious "window unexpectedly deleted" errors... */ @@ -696,6 +701,8 @@ run_hack (state *s, int list_elt, Bool report_errors_p) flush_dialog_changes_and_save (s); schedule_preview (s, 0); + if (s->debug_p) + fprintf (stderr, "%s: command: DEMO %d\n", blurb(), hack_number + 1); status = xscreensaver_command (GDK_DISPLAY(), XA_DEMO, hack_number + 1, False, &err); @@ -902,6 +909,7 @@ about_menu_cb (GtkAction *menu_action, gpointer user_data) } +/* Help menu / Documentation */ G_MODULE_EXPORT void doc_menu_cb (GtkAction *menu_action, gpointer user_data) { @@ -930,6 +938,7 @@ doc_menu_cb (GtkAction *menu_action, gpointer user_data) } +/* File menu opened */ G_MODULE_EXPORT void file_menu_cb (GtkAction *menu_action, gpointer user_data) { @@ -938,6 +947,7 @@ file_menu_cb (GtkAction *menu_action, gpointer user_data) } +/* File menu / Activate */ G_MODULE_EXPORT void activate_menu_cb (GtkAction *menu_action, gpointer user_data) { @@ -946,6 +956,7 @@ activate_menu_cb (GtkAction *menu_action, gpointer user_data) } +/* File menu / Lock */ G_MODULE_EXPORT void lock_menu_cb (GtkAction *menu_action, gpointer user_data) { @@ -954,6 +965,7 @@ lock_menu_cb (GtkAction *menu_action, gpointer user_data) } +/* File menu / Kill daemon */ G_MODULE_EXPORT void kill_menu_cb (GtkAction *menu_action, gpointer user_data) { @@ -962,11 +974,14 @@ kill_menu_cb (GtkAction *menu_action, gpointer user_data) } +/* File menu / Restart */ G_MODULE_EXPORT void restart_menu_cb (GtkWidget *widget, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ flush_dialog_changes_and_save (s); + if (s->debug_p) + fprintf (stderr, "%s: command: EXIT\n", blurb()); xscreensaver_command (GDK_DISPLAY(), XA_EXIT, 0, False, NULL); sleep (1); if (system ("xscreensaver -splash &") < 0) @@ -1080,17 +1095,19 @@ demo_write_init_file (state *s, saver_preferences *p) } +/* The "Preview" button */ G_MODULE_EXPORT void run_this_cb (GtkButton *button, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ int list_elt = selected_list_element (s); if (list_elt < 0) return; - if (!flush_dialog_changes_and_save (s)) - run_hack (s, list_elt, True); + flush_dialog_changes_and_save (s); + run_hack (s, list_elt, True); } +/* The "Documentation" button on the Settings dialog */ G_MODULE_EXPORT void manual_cb (GtkButton *button, gpointer user_data) { @@ -1170,6 +1187,7 @@ force_list_select_item (state *s, GtkWidget *list, int list_elt, Bool scroll_p) } +/* The down arrow */ G_MODULE_EXPORT void run_next_cb (GtkButton *button, gpointer user_data) { @@ -1199,6 +1217,7 @@ run_next_cb (GtkButton *button, gpointer user_data) } +/* The up arrow */ G_MODULE_EXPORT void run_prev_cb (GtkButton *button, gpointer user_data) { @@ -1736,7 +1755,9 @@ flush_dialog_changes_and_save (state *s) /* Tell the xscreensaver daemon to wake up and reload the init file, in case the timeout has changed. Without this, it would wait until the *old* timeout had expired before reloading. */ - xscreensaver_command (GDK_DISPLAY(), XA_DEACTIVATE, 0, 0, 0); + if (s->debug_p) + fprintf (stderr, "%s: command: DEACTIVATE\n", blurb()); + xscreensaver_command (GDK_DISPLAY(), XA_DEACTIVATE, 0, 0, 0); } s->saving_p = False; @@ -2307,7 +2328,9 @@ browse_text_program_cb (GtkButton *button, gpointer user_data) G_MODULE_EXPORT void preview_theme_cb (GtkWidget *w, gpointer user_data) { - if (system ("xscreensaver-auth --splash &") < 0) + /* Settings button is disabled with --splash --splash so that we don't + end up with two copies of xscreensaver-settings running. */ + if (system ("xscreensaver-auth --splash --splash &") < 0) fprintf (stderr, "%s: splash exec failed\n", blurb()); } diff --git a/driver/dialog.c b/driver/dialog.c index c12308b8..1ab6ee45 100644 --- a/driver/dialog.c +++ b/driver/dialog.c @@ -1,5 +1,5 @@ /* dialog.c --- the password dialog and splash screen. - * xscreensaver, Copyright © 1993-2021 Jamie Zawinski + * xscreensaver, Copyright © 1993-2022 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -47,6 +47,10 @@ #include #include +#ifndef HAVE_XINPUT +# error The XInput2 extension is required +#endif + #include /* for CARD32 */ #include #include @@ -129,7 +133,7 @@ typedef struct { typedef struct { char *text; XftFont *font; - XftColor fg; + XftColor fg, fg2; Pixel bg; enum { LABEL, BUTTON, TEXT, TEXT_RO } type; line_align align; @@ -150,7 +154,7 @@ struct window_state { Window window; Colormap cmap; - Bool splash_p; + int splash_p; auth_state auth_state; int xi_opcode; int xkb_opcode; @@ -181,6 +185,7 @@ struct window_state { XtIntervalId timer; XtIntervalId cursor_timer; /* Blink the I-beam */ + XtIntervalId bs_timer; /* Auto-repeat Backspace */ int i_beam; double start_time, end_time; @@ -214,6 +219,7 @@ struct window_state { XftColor xft_foreground; XftColor xft_text_foreground; XftColor xft_button_foreground; + XftColor xft_button_disabled; XftColor xft_error_foreground; Pixel passwd_background; Pixel thermo_foreground; @@ -489,10 +495,13 @@ draw_dialog_line (window_state *ws, Drawable d, dialog_line *line, if (line->type == BUTTON && line->button && - (line->button->down_p || line->button->disabled_p)) + line->button->down_p) xoff2 = yoff2 = MIN (ws->shadow_width, line->font->ascent/2); - XftDrawStringUtf8_multi (ws->xftdraw, &line->fg, line->font, + XftDrawStringUtf8_multi (ws->xftdraw, + (line->button && line->button->disabled_p + ? &line->fg2 : &line->fg), + line->font, left + xoff2, y + ypad + yoff2 + line->font->ascent, (FcChar8 *) text, strlen (text), @@ -672,6 +681,31 @@ get_xft_color (window_state *ws, XftColor *ret, s, ret); } +static void +dim_xft_color (window_state *ws, const XftColor *in, Pixel bg, XftColor *out) +{ + double dim = 0.6; +# if 0 /* Turns out Xft alpha doesn't work. How very. */ + XRenderColor rc = in->color; + rc.alpha *= dim; +# else + XRenderColor rc; + XColor xc; + xc.pixel = bg; + XQueryColor (ws->dpy, DefaultColormapOfScreen (ws->screen), &xc); + rc.red = dim * in->color.red + (1-dim) * xc.red; + rc.green = dim * in->color.green + (1-dim) * xc.green; + rc.blue = dim * in->color.blue + (1-dim) * xc.blue; + rc.alpha = in->color.alpha; +# endif + if (! XftColorAllocValue (ws->dpy, + DefaultVisualOfScreen(ws->screen), + DefaultColormapOfScreen (ws->screen), + &rc, out)) + abort(); +} + + static int get_int (window_state *ws, const char *name, const char *rclass) { @@ -692,10 +726,12 @@ choose_asterisk (window_state *ws) int i, L; for (i = 0; i < countof (candidates) - 1; i++) { +# ifdef HAVE_XFT if (XftCharExists (ws->dpy, ws->label_font, (FcChar32) *uc)) break; if (debug_p) fprintf (stderr, "%s: char U+%0lX does not exist\n", blurb(), *uc); +# endif uc++; } @@ -955,7 +991,7 @@ create_window (window_state *ws, int w, int h) /* Loads resources and creates and returns the global window state. */ static window_state * -window_init (Widget root_widget, Bool splash_p) +window_init (Widget root_widget, int splash_p) { Display *dpy = XtDisplay (root_widget); window_state *ws; @@ -1042,6 +1078,8 @@ window_init (Widget root_widget, Bool splash_p) "error.foreground", "Error.Foreground"); get_xft_color (ws, &ws->xft_button_foreground, "button.foreground", "Button.Foreground"); + dim_xft_color (ws, &ws->xft_button_foreground, ws->background, + &ws->xft_button_disabled); ws->shadow_top = get_color (ws, "topShadowColor", "Foreground"); ws->shadow_bottom = get_color (ws, "bottomShadowColor", "Background"); @@ -1328,6 +1366,7 @@ window_draw (window_state *ws) lines[i].text = ws->heading_label; /* XScreenSaver */ lines[i].font = ws->heading_font; lines[i].fg = ws->xft_foreground; + lines[i].fg2 = lines[i].fg; lines[i].bg = ws->background; lines[i].type = LABEL; lines[i].align = CENTER; @@ -1338,6 +1377,7 @@ window_draw (window_state *ws) lines[i].text = _("Update available!\nThis version is very old.\n"); lines[i].font = ws->error_font; lines[i].fg = ws->xft_error_foreground; + lines[i].fg2 = lines[i].fg; lines[i].bg = ws->background; lines[i].type = LABEL; lines[i].align = CENTER; @@ -1349,6 +1389,7 @@ window_draw (window_state *ws) lines[i].text = _("PRE-RELEASE VERSION"); lines[i].font = ws->error_font; lines[i].fg = ws->xft_error_foreground; + lines[i].fg2 = lines[i].fg; lines[i].bg = ws->background; lines[i].type = LABEL; lines[i].align = CENTER; @@ -1360,6 +1401,7 @@ window_draw (window_state *ws) lines[i].text = ws->hostname_label; lines[i].font = ws->hostname_font; lines[i].fg = ws->xft_foreground; + lines[i].fg2 = lines[i].fg; lines[i].bg = ws->background; lines[i].type = LABEL; lines[i].align = CENTER; @@ -1370,6 +1412,7 @@ window_draw (window_state *ws) lines[i].text = ""; \ lines[i].font = ws->body_font; \ lines[i].fg = ws->xft_foreground; \ + lines[i].fg2 = lines[i].fg; \ lines[i].bg = ws->background; \ lines[i].type = LABEL; \ lines[i].align = CENTER; \ @@ -1383,6 +1426,7 @@ window_draw (window_state *ws) _("DEBUG MODE:\nAll keystrokes are being logged to stderr.\n"); lines[i].font = ws->error_font; lines[i].fg = ws->xft_error_foreground; + lines[i].fg2 = lines[i].fg; lines[i].bg = ws->background; lines[i].type = LABEL; lines[i].align = CENTER; @@ -1394,6 +1438,7 @@ window_draw (window_state *ws) lines[i].text = ws->body_label; /* Copyright or error message */ lines[i].font = ws->body_font; lines[i].fg = ws->xft_foreground; + lines[i].fg2 = lines[i].fg; lines[i].bg = ws->background; lines[i].type = LABEL; lines[i].align = CENTER; @@ -1414,6 +1459,7 @@ window_draw (window_state *ws) lines[i].fg = (ws->msgs[j].type == AUTH_MSGTYPE_ERROR ? ws->xft_error_foreground : ws->xft_foreground); + lines[i].fg2 = lines[i].fg; lines[i].bg = ws->background; lines[i].type = LABEL; lines[i].align = CENTER; @@ -1429,6 +1475,7 @@ window_draw (window_state *ws) lines[i].text = _("Username:"); lines[i].font = ws->label_font; lines[i].fg = ws->xft_foreground; + lines[i].fg2 = lines[i].fg; lines[i].bg = ws->background; lines[i].type = LABEL; lines[i].align = LEFT; @@ -1438,6 +1485,7 @@ window_draw (window_state *ws) lines[i].text = ws->user; /* $USER */ lines[i].font = ws->label_font; lines[i].fg = ws->xft_text_foreground; + lines[i].fg2 = lines[i].fg; lines[i].bg = ws->passwd_background; lines[i].type = TEXT_RO; lines[i].align = RIGHT; @@ -1447,6 +1495,7 @@ window_draw (window_state *ws) lines[i].text = trim (ws->msgs[j].msg); /* PAM prompt text */ lines[i].font = ws->label_font; lines[i].fg = ws->xft_foreground; + lines[i].fg2 = lines[i].fg; lines[i].bg = ws->background; lines[i].type = LABEL; lines[i].align = LEFT; @@ -1462,6 +1511,7 @@ window_draw (window_state *ws) : ""); lines[i].font = ws->label_font; lines[i].fg = ws->xft_text_foreground; + lines[i].fg2 = lines[i].fg; lines[i].bg = ws->passwd_background; lines[i].type = TEXT; lines[i].align = RIGHT; @@ -1474,6 +1524,7 @@ window_draw (window_state *ws) lines[i].text = date_text; lines[i].font = ws->date_font; lines[i].fg = ws->xft_foreground; + lines[i].fg2 = lines[i].fg; lines[i].bg = ws->background; lines[i].type = LABEL; lines[i].align = RIGHT; @@ -1486,6 +1537,7 @@ window_draw (window_state *ws) lines[i].text = ws->kbd_layout_label; lines[i].font = ws->date_font; lines[i].fg = ws->xft_foreground; + lines[i].fg2 = lines[i].fg; lines[i].bg = ws->background; lines[i].type = LABEL; lines[i].align = RIGHT; @@ -1534,6 +1586,7 @@ window_draw (window_state *ws) lines[i].text = _("Settings"); lines[i].font = ws->button_font; lines[i].fg = ws->xft_button_foreground; + lines[i].fg2 = ws->xft_button_disabled; lines[i].bg = ws->button_background; lines[i].type = BUTTON; lines[i].align = LEFT; @@ -1541,9 +1594,14 @@ window_draw (window_state *ws) lines[i].button = &ws->demo_button_state; i++; + if (ws->splash_p > 1) + /* Settings button is disabled with --splash --splash */ + ws->demo_button_state.disabled_p = True; + lines[i].text = _("Help"); lines[i].font = ws->button_font; lines[i].fg = ws->xft_button_foreground; + lines[i].fg2 = ws->xft_button_disabled; lines[i].bg = ws->button_background; lines[i].type = BUTTON; lines[i].align = RIGHT; @@ -1557,6 +1615,7 @@ window_draw (window_state *ws) lines[i].text = _("New Login"); lines[i].font = ws->button_font; lines[i].fg = ws->xft_button_foreground; + lines[i].fg2 = ws->xft_button_disabled; lines[i].bg = ws->button_background; lines[i].type = BUTTON; lines[i].align = LEFT; @@ -1568,6 +1627,7 @@ window_draw (window_state *ws) lines[i].text = _("OK"); lines[i].font = ws->button_font; lines[i].fg = ws->xft_button_foreground; + lines[i].fg2 = ws->xft_button_disabled; lines[i].bg = ws->button_background; lines[i].type = BUTTON; lines[i].align = RIGHT; @@ -1772,6 +1832,11 @@ destroy_window (window_state *ws) XtRemoveTimeOut (ws->cursor_timer); ws->cursor_timer = 0; } + if (ws->bs_timer) + { + XtRemoveTimeOut (ws->bs_timer); + ws->bs_timer = 0; + } while (XCheckMaskEvent (ws->dpy, PointerMotionMask, &event)) if (verbose_p) @@ -1932,6 +1997,7 @@ persistent_auth_status_failure (window_state *ws, } +static void bs_timer (XtPointer, XtIntervalId *); static void handle_keypress (window_state *ws, XKeyEvent *event) @@ -1997,6 +2063,15 @@ handle_keypress (window_state *ws, XKeyEvent *event) } ws->plaintext_passwd_char_size[nchars-1] = 0; } + + /* The XInput2 extension does not send auto-repeat KeyPress + events, and it annoys people that you can't hold down the + Backspace key to clear the line. So clear the whole line + if the key is held down for a little while. */ + if (ws->bs_timer) + XtRemoveTimeOut (ws->bs_timer); + ws->bs_timer = + XtAppAddTimeOut (ws->app, 1000 * 0.6, bs_timer, (XtPointer) ws); } break; @@ -2008,7 +2083,7 @@ handle_keypress (window_state *ws, XKeyEvent *event) ws->auth_state = AUTH_CANCEL; break; - case '\025': case '\030': /* Erase line */ + case '\025': case '\030': /* Erase line ^U ^X */ memset (ws->plaintext_passwd, 0, sizeof (ws->plaintext_passwd)); memset (ws->plaintext_passwd_char_size, 0, sizeof (ws->plaintext_passwd_char_size)); @@ -2109,6 +2184,14 @@ handle_event (window_state *ws, XEvent *xev) refresh_p = True; break; + case KeyRelease: + if (ws->bs_timer) + { + XtRemoveTimeOut (ws->bs_timer); + ws->bs_timer = 0; + } + break; + case ButtonPress: case ButtonRelease: { @@ -2141,6 +2224,23 @@ cursor_timer (XtPointer closure, XtIntervalId *id) } +/* Auto-repeat Backspace, since XInput2 doesn't do autorepeat. */ +static void +bs_timer (XtPointer closure, XtIntervalId *id) +{ + window_state *ws = (window_state *) closure; + if (ws->bs_timer) + XtRemoveTimeOut (ws->bs_timer); + ws->bs_timer = 0; + /* Erase line */ + memset (ws->plaintext_passwd, 0, sizeof (ws->plaintext_passwd)); + memset (ws->plaintext_passwd_char_size, 0, + sizeof (ws->plaintext_passwd_char_size)); + memset (ws->censored_passwd, 0, sizeof(ws->censored_passwd)); + window_draw (ws); +} + + /* Redraw the window for the thermometer, and exit if the time has expired. */ static void @@ -2550,10 +2650,10 @@ xscreensaver_auth_finished (void *closure, Bool authenticated_p) void -xscreensaver_splash (void *closure) +xscreensaver_splash (void *closure, Bool disable_settings_p) { Widget root_widget = (Widget) closure; - window_state *ws = window_init (root_widget, True); + window_state *ws = window_init (root_widget, disable_settings_p ? 2 : 1); ws->auth_state = AUTH_READ; gui_main_loop (ws, True, False); destroy_window (ws); diff --git a/driver/exts.c b/driver/exts.c index ffc2d1a1..af5c536f 100644 --- a/driver/exts.c +++ b/driver/exts.c @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright © 1991-2021 Jamie Zawinski +/* xscreensaver, Copyright © 1991-2022 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -17,6 +17,10 @@ # include "config.h" #endif +#ifndef HAVE_XINPUT +# error The XInput2 extension is required +#endif + #include #include #include diff --git a/driver/fade.c b/driver/fade.c index 4a2d3bc6..373dd203 100644 --- a/driver/fade.c +++ b/driver/fade.c @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright © 1992-2021 Jamie Zawinski +/* xscreensaver, Copyright © 1992-2022 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -105,14 +105,13 @@ */ #undef HAVE_RANDR_12 -#define HAVE_XINPUT2 1 /* Mandatory */ - - -#ifdef HAVE_XINPUT2 -# include -# include "xinput.h" +#ifndef HAVE_XINPUT +# error The XInput2 extension is required #endif +#include +#include "xinput.h" + typedef struct { int nscreens; @@ -157,7 +156,7 @@ double_time (void) } -#ifdef HAVE_XINPUT2 +#ifdef HAVE_XINPUT static int xi_opcode = -1; #endif @@ -176,7 +175,7 @@ user_event_p (Display *dpy, XEvent *event, XPointer arg) case MotionNotify: if (motion_p) return True; break; -# ifdef HAVE_XINPUT2 +# ifdef HAVE_XINPUT case GenericEvent: { XIRawEvent *re; @@ -197,7 +196,7 @@ user_event_p (Display *dpy, XEvent *event, XPointer arg) /* Calling XFreeEventData here is bad news */ } break; -# endif /* HAVE_XINPUT2 */ +# endif /* HAVE_XINPUT */ default: break; } @@ -213,7 +212,7 @@ user_active_p (XtAppContext app, Display *dpy, Bool fade_out_p) Bool motion_p = fade_out_p; /* Motion aborts fade-out, not fade-in. */ motion_p = False; /* Naah, never abort on motion only */ -# ifdef HAVE_XINPUT2 +# ifdef HAVE_XINPUT if (xi_opcode == -1) { Bool ov = verbose_p; diff --git a/driver/passwd-helper.c b/driver/passwd-helper.c deleted file mode 100644 index 4b17c635..00000000 --- a/driver/passwd-helper.c +++ /dev/null @@ -1,158 +0,0 @@ -/* passwd-helper.c --- verifying typed passwords with external helper program - * xscreensaver, Copyright © 1993-2021 Jamie Zawinski - * written by Olaf Kirch - * - * 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. No representations are made about the suitability of this - * software for any purpose. It is provided "as is" without express or - * implied warranty. - */ - - -/***************************************************************************** - - I strongly suspect that this code has not been used in decades, and I - am considering removing it. These details should be hidden behind PAM. - If you are using this code, email me and tell me why. -- jwz, Feb 2021 - - *****************************************************************************/ - -#error "email jwz@jwz.org about passwd-helper.c" - - -/* The idea here is to be able to run xscreensaver without any setuid bits. - * Password verification happens through an external program that you feed - * your password to on stdin. The external command is invoked with a user - * name argument. - * - * The external helper does whatever authentication is necessary. Currently, - * SuSE uses "unix2_chkpwd", which is a variation of "unix_chkpwd" from the - * PAM distribution. - * - * Normally, the password helper should just authenticate the calling user - * (i.e. based on the caller's real uid). This is in order to prevent - * brute-forcing passwords in a shadow environment. A less restrictive - * approach would be to allow verifying other passwords as well, but always - * with a 2 second delay or so. (Not sure what SuSE's "unix2_chkpwd" - * currently does.) - * -- Olaf Kirch , 16-Dec-2003 - */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#ifndef NO_LOCKING /* whole file */ - -#include -#ifdef HAVE_UNISTD_H -# include -#endif - -#include -#include -#include -#include -#include -#include - -#include "blurb.h" -#include "auth.h" - - -static int -ext_run (const char *user, const char *typed_passwd) -{ - int pfd[2], status; - pid_t pid; - - if (pipe(pfd) < 0) - return 0; - - if (verbose_p) - fprintf (stderr, "%s: EXT: %s\n", blurb(), PASSWD_HELPER_PROGRAM); - - if ((pid = fork()) < 0) { - close(pfd[0]); - close(pfd[1]); - return 0; - } - - if (pid == 0) { - close(pfd[1]); - if (pfd[0] != 0) - dup2(pfd[0], 0); - - /* Helper is invoked as helper service-name [user] */ - execlp(PASSWD_HELPER_PROGRAM, PASSWD_HELPER_PROGRAM, "xscreensaver", user, NULL); - if (verbose_p) - fprintf(stderr, "%s: EXT: %s\n", PASSWD_HELPER_PROGRAM, - strerror(errno)); - exit(1); - } - - close(pfd[0]); - - /* Write out password to helper process */ - if (!typed_passwd) - typed_passwd = ""; - write(pfd[1], typed_passwd, strlen(typed_passwd)); - close(pfd[1]); - - while (waitpid(pid, &status, 0) < 0) { - if (errno == EINTR) - continue; - if (verbose_p) - fprintf(stderr, "%s: EXT: waitpid failed: %s\n", - blurb(), strerror(errno)); - return 0; - } - - if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) - return 0; - return 1; -} - - - -/* This can be called at any time, and says whether the typed password - belongs to either the logged in user (real uid, not effective); or - to root. - */ -int -ext_passwd_valid_p (void *closure, const char *typed_passwd) -{ - struct passwd *pw; - int res = 0; - - if ((pw = getpwuid(getuid())) != NULL) - res = ext_run (pw->pw_name, typed_passwd); - endpwent(); - -#ifdef ALLOW_ROOT_PASSWD - if (!res) - res = ext_run ("root", typed_passwd); -#endif /* ALLOW_ROOT_PASSWD */ - - return res; -} - - -Bool -ext_priv_init (void) -{ - /* Make sure the passwd helper exists */ - if (access(PASSWD_HELPER_PROGRAM, X_OK) < 0) { - fprintf(stderr, - "%s: EXT: warning: %s does not exist.\n" - "%s: EXT password authentication will not work.\n", - blurb(), PASSWD_HELPER_PROGRAM, blurb()); - return False; - } - return True; -} - -#endif /* NO_LOCKING -- whole file */ diff --git a/driver/passwd-pam.c b/driver/passwd-pam.c index 87942ab4..4d434db1 100644 --- a/driver/passwd-pam.c +++ b/driver/passwd-pam.c @@ -1,5 +1,5 @@ /* passwd-pam.c --- verifying typed passwords with PAM - * xscreensaver, Copyright © 1993-2021 Jamie Zawinski + * xscreensaver, Copyright © 1993-2022 Jamie Zawinski * By Bill Nottingham and jwz. * * Permission to use, copy, modify, distribute, and sell this software and its @@ -34,12 +34,16 @@ those files are not a part of PAM's C API, but it's how real-world systems actually work. - Also note that FreeBSD's implementation of PAM requires the calling process - to be running as root during the entire interactive PAM conversation: it - can't ever disavow privileges. Linux's PAM implementation uses a setuid - helper so that a non-root process can still authenticate, as is right and - proper. Consequently, XScreenSaver does not support PAM on FreeBSD. - Dear FreeBSD, get your shit together. + Also note that FreeBSD's PAM configuration requires the calling process to + be running as root during the *entire* interactive PAM conversation: it + can't ever disavow privileges. Whereas Linux's PAM configurations use a + setuid helper within the PAM stack so that a non-root process can still + authenticate, as is right and proper. Consequently, PAM does not work with + XScreenSaver on FreeBSD by default. Dear FreeBSD, get your shit together. + + I am told that only *some* of the FreeBSD PAM modules have this bug, e.g., + "pam_unix" fails, but "pam_winbind" works. So this problem is demonstrably + fixable entirely within the PAM stack, and that's where it should be fixed. */ #ifdef HAVE_CONFIG_H diff --git a/driver/test-screens.c b/driver/test-screens.c index 141b7ad9..1e0189a1 100644 --- a/driver/test-screens.c +++ b/driver/test-screens.c @@ -83,7 +83,7 @@ test (int testnum, const char *screens, const char *desired) { sprintf (out, "%dx%d+%d+%d", m->width, m->height, m->x, m->y); if (m->screen) - sprintf (out + strlen(out), "@%d", (int) m->screen); + sprintf (out + strlen(out), "@%ld", (long) m->screen); } else strcpy (out, failstr (m->sanity)); diff --git a/driver/test-xinput.c b/driver/test-xinput.c index eea707cf..92e84da6 100644 --- a/driver/test-xinput.c +++ b/driver/test-xinput.c @@ -1,5 +1,5 @@ /* test-xinput.c --- playing with the XInput2 extension. - * xscreensaver, Copyright © 2021 Jamie Zawinski + * xscreensaver, Copyright © 2021-2022 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -8,6 +8,26 @@ * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. + * + * This verbosely prints out all events received from Xlib and the XInput2 + * extension. + * + * --grab, --grab-kbd, --grab-mouse + * Read events while grabbed. The grab is released after 15 seconds. + * + * --sync, --async + * Async grabs queue up events and deliver them all at release. + * + * Real X11 multi-head ("Zaphod Heads") has different behaviors than + * single-screen displays with multiple monitors (Xinerama, XRANDR). + * To test X11 multi-head or different visual depths on Raspberry Pi + * you have to do it inside a nested server: + * + * apt install xserver-xephyr + * sudo rm /tmp/.X1-lock /tmp/.X11-unix/X1 + * export DISPLAY=:0 + * Xephyr :1 -ac -screen 1280x720 -screen 640x480x8 & + * export DISPLAY=:1 */ #ifdef HAVE_CONFIG_H @@ -29,12 +49,49 @@ #include #include -#include "blurb.h" +/* #include "blurb.h" */ +extern const char *progname; +extern int verbose_p; + #include "xinput.h" char *progclass = "XScreenSaver"; Bool debug_p = True; +#undef countof +#define countof(x) (sizeof((x))/sizeof((*x))) + +#define RST "\x1B[0m" +#define RED "\x1B[31m" +#define GRN "\x1B[32m" +#define YEL "\x1B[33m" +#define BLU "\x1B[34m" +#define MAG "\x1B[35m" +#define CYN "\x1B[36m" +#define WHT "\x1B[37m" +#define BLD "\x1B[1m" +#define UL "\x1B[4m" + +static const char * +blurb(void) +{ + static char buf[255] = { 0 }; + struct tm *tm; + struct timeval tv; +# ifdef GETTIMEOFDAY_TWO_ARGS + struct timezone tzp; + gettimeofday (&tv, &tzp); +# else + gettimeofday (&tv); +# endif + tm = localtime (&tv.tv_sec); + sprintf (buf, "%s: %02d:%02d:%02d.%03lu", progname, + tm->tm_hour, tm->tm_min, tm->tm_sec, + (unsigned long) (tv.tv_usec / 1000)); + return buf; +} + + static void ungrab_timer (XtPointer closure, XtIntervalId *id) { @@ -64,6 +121,477 @@ grab_string (int status) } +typedef enum { + ETYPE, ETIME, ESERIAL, EROOT, EWIN, ESUB, EX, EY, EXR, EYR, + ERAW0, ERAW1, EFLAGS, ESTATE, EKEYCODE, EKEY, EHINT, ESSCR, + EEND +} coltype; + +typedef struct { + const char *name; + int width; + enum { TSTR, TSTRL, TINT, TUINT, THEX, TTIME } type; +} columns; + + +static const columns cols[] = { + /* ETYPE */ { "Type", 17, TSTRL }, + /* ETIME */ { "Timestamp", 11, TTIME }, + /* ESERIAL */ { "Serial", 9, TUINT }, + /* EROOT */ { "Root", 8, THEX }, + /* EWIN */ { "Window", 8, THEX }, + /* ESUB */ { "Subwin", 8, THEX }, + /* EX */ { "X", 11, TINT }, + /* EY */ { "Y", 11, TINT }, + /* EXR */ { "X Root", 11, TINT }, + /* EYR */ { "Y Root", 11, TINT }, + /* ERAW0 */ { "RAW 0", 8, THEX }, + /* ERAW1 */ { "RAW 1", 8, THEX }, + /* EFLAGS */ { "Flags", 8, THEX }, + /* ESTATE */ { "State", 8, THEX }, + /* EKEYCODE */ { "Code", 5, THEX }, + /* EKEY */ { "Key", 3, TSTR }, + /* EHINT */ { "Hint", 9, TINT }, + /* ESSCR */ { "Same", 4, TINT }, +}; + +static struct { Time t; XEvent e; } history[100] = { 0, }; + +static void +print_header (void) +{ + char buf[1024] = { 0 }; + char *s = buf; + coltype t; + + if (countof(cols) != EEND) abort(); + + for (t = 0; t < EEND; t++) + { + if (t > 0) *s++ = ' '; + if (cols[t].type == TSTRL) + sprintf (s, "%-*s", cols[t].width, cols[t].name); + else + sprintf (s, "%*s", cols[t].width, cols[t].name); + s += strlen(s); + } + *s++ = '\n'; + for (t = 0; t < EEND; t++) + { + int i; + if (t > 0) *s++ = ' '; + for (i = 0; i < cols[t].width; i++) + *s++ = '='; + } + fprintf (stderr, "\n%s\n", buf); +} + + +static void +print_field (char *out, coltype t, void *val) +{ + const columns *col = &cols[t]; + if (! val) + { + sprintf (out, "%*s", col->width, "-"); + return; + } + + switch (col->type) { + case TSTRL: sprintf (out, "%-*s", col->width, (char *) val); break; + case TSTR: sprintf (out, "%*s", col->width, (char *) val); break; + case TINT: sprintf (out, "%*d", col->width, *((int *) val)); break; + case TUINT: sprintf (out, "%*u", col->width, *((unsigned int *) val)); break; + case THEX: sprintf (out, "%*X", col->width, *((unsigned int *) val)); break; + case TTIME: sprintf (out, "%*.3f", col->width, + (double) (*((unsigned int *) val)) / 1000.0); break; + default: abort(); break; + } +} + + +static void +push_history (Time t, XEvent *xev) +{ + memmove (history + 1, history, sizeof(history) - sizeof(*history)); + history[0].t = t; + history[0].e = *xev; +} + + +static void +asciify (char *c, int L) +{ + if (!strcmp(c,"\n")) strcpy(c, "\\n"); + else if (!strcmp(c,"\r")) strcpy(c, "\\r"); + else if (!strcmp(c,"\t")) strcpy(c, "\\t"); + else if (!strcmp(c," ")) strcpy(c, "SPC"); + else if (L == 1 && c[0] < ' ') + sprintf (c, "^%c", c[0] + '@'); +} + + +static Bool error_handler_hit_p = False; + +static int +ignore_all_errors_ehandler (Display *dpy, XErrorEvent *error) +{ + error_handler_hit_p = True; + return 0; +} + + +/* Whether the field's value is sane. */ +static Bool +validate_field (Display *dpy, coltype t, void *val) +{ + const char *err = 0; + if (!val) return True; + + switch (t) { + case ETIME: + { + Time t = *(Time *) val; + int i; + for (i = 0; i < countof(history); i++) + { + if (t && t == history[i].t) + { + err = "DUP TIME"; + break; + } + else if (t && t < history[i].t) + { + err = "TIME TRAVEL"; + break; + } + } + } + break; + + case ESERIAL: + { + unsigned long s = *(unsigned long *) val; + int i; + for (i = 0; i < countof(history); i++) + { + if (s && s == history[i].e.xany.serial) + { + err = "DUP SERIAL"; + break; + } + else if (s && s < history[i].e.xany.serial) + { + err = "TIME TRAVEL"; + break; + } + } + } + break; + + case EROOT: case EWIN: case ESUB: + { + Window w = *(Window *) val; + if (w) + { + XWindowAttributes xgwa; + error_handler_hit_p = False; + XSync (dpy, False); + XSetErrorHandler (ignore_all_errors_ehandler); + XSync (dpy, False); + XGetWindowAttributes (dpy, w, &xgwa); + XSync (dpy, False); + if (error_handler_hit_p) + { + err = "BAD WINDOW"; + break; + } + } + } + + case EX: case EY: case EXR: case EYR: + { + int i = *(int *) val; + if (i < 0 || i > 0xFFFF) + { + err = "BAD COORD"; + break; + } + } + break; + + case EFLAGS: + { + /* "The only defined flag is XIKeyRepeat for XI_KeyPress events." + But XI_RawKeyPress events don't repeat! */ + int i = *(int *) val; + if (i != 0 && 1 != XIKeyRepeat) + { + err = "BAD BOOL"; + break; + } + } + break; + + case ESTATE: + { + unsigned int i = *(int *) val; + + if (i & ~(ShiftMask | LockMask | ControlMask | Mod1Mask | + Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask | + Button1Mask | Button2Mask | Button3Mask | + Button4Mask | Button5Mask)) + { + err = "BAD MODS"; + break; + } + } + break; + + case EKEYCODE: + { + int i = *(int *) val; + if (i < 0 || i > 0xFFFF) + { + err = "BAD KEYCODE"; + break; + } + } + break; + + case EHINT: case ESSCR: + { + int i = *(int *) val; + if (i != 0 && 1 != 1) + { + err = "BAD BOOL"; + break; + } + } + break; + + default: + break; + } + + if (err) return False; + return True; +} + + +static void +print_event (Display *dpy, XEvent *xev, int xi_opcode) +{ + XIRawEvent *re = 0; + XIDeviceEvent *de = 0; + void *fields[EEND] = { 0, }; + + switch (xev->xany.type) { + case KeyPress: + case KeyRelease: + { + static XComposeStatus compose = { 0, }; + KeySym keysym = 0; + static char c[100]; + int n; + + fields[ETYPE] = (void *) + (xev->xany.type == KeyPress ? "KeyPress" : "KeyRelease"); + fields[ETIME] = &xev->xkey.time; + fields[ESERIAL] = &xev->xkey.serial; + fields[EWIN] = &xev->xkey.window; + fields[EROOT] = &xev->xkey.root; + fields[ESUB] = &xev->xkey.subwindow; + fields[EX] = &xev->xkey.x; + fields[EY] = &xev->xkey.y; + fields[EXR] = &xev->xkey.x_root; + fields[EYR] = &xev->xkey.y_root; + fields[ESTATE] = &xev->xkey.state; + fields[EKEYCODE] = &xev->xkey.keycode; + + n = XLookupString (&xev->xkey, c, sizeof(c)-1, &keysym, &compose); + c[n] = 0; + asciify (c, n); + fields[EKEY] = c; + } + break; + case ButtonPress: + case ButtonRelease: + { + fields[ETYPE] = (void *) + (xev->xany.type == ButtonPress ? "ButtonPress" : "ButtonRelease"); + fields[ETIME] = &xev->xbutton.time; + fields[ESERIAL] = &xev->xbutton.serial; + fields[EWIN] = &xev->xbutton.window; + fields[EROOT] = &xev->xbutton.root; + fields[ESUB] = &xev->xbutton.subwindow; + fields[EX] = &xev->xbutton.x; + fields[EY] = &xev->xbutton.y; + fields[EXR] = &xev->xbutton.x_root; + fields[EYR] = &xev->xbutton.y_root; + fields[ESTATE] = &xev->xbutton.state; + fields[EKEYCODE] = &xev->xbutton.button; + } + break; + case MotionNotify: + { + fields[ETYPE] = (void *) "MotionNotify"; + fields[ETIME] = &xev->xmotion.time; + fields[ESERIAL] = &xev->xmotion.serial; + fields[EWIN] = &xev->xmotion.window; + fields[EROOT] = &xev->xmotion.root; + fields[ESUB] = &xev->xmotion.subwindow; + fields[EX] = &xev->xmotion.x; + fields[EY] = &xev->xmotion.y; + fields[EXR] = &xev->xmotion.x_root; + fields[EYR] = &xev->xmotion.y_root; + fields[ESTATE] = &xev->xmotion.state; + fields[EHINT] = &xev->xmotion.is_hint; + } + break; + case GenericEvent: + break; + case EnterNotify: + case LeaveNotify: + break; + default: + { + static char ee[100]; + sprintf (ee, "EVENT %2d", xev->xany.type); + fields[ETYPE] = ⅇ + fields[ESERIAL] = &xev->xany.serial; + fields[EWIN] = &xev->xany.window; + } + break; + } + + if (xev->xcookie.type != GenericEvent || + xev->xcookie.extension != xi_opcode) + goto DONE; /* not an XInput event */ + if (!xev->xcookie.data) + XGetEventData (dpy, &xev->xcookie); + if (!xev->xcookie.data) + { + fields[ETYPE] = "BAD XIINPUT"; + goto DONE; + } + + re = xev->xcookie.data; + de = (XIDeviceEvent *) re; + + if (xev->xany.serial != re->serial) abort(); + + switch (xev->xcookie.evtype) { + case XI_RawKeyPress: fields[ETYPE] = "XI_RawKeyPress"; break; + case XI_RawKeyRelease: fields[ETYPE] = "XI_RawKeyRelease"; break; + case XI_RawButtonPress: fields[ETYPE] = "XI_RawBtnPress"; break; + case XI_RawButtonRelease: fields[ETYPE] = "XI_RawBtnRelease"; break; + case XI_RawMotion: fields[ETYPE] = "XI_RawMotion"; break; + case XI_RawTouchBegin: fields[ETYPE] = "XI_RawTouchBegin"; break; + case XI_RawTouchEnd: fields[ETYPE] = "XI_RawTouchEnd"; break; + case XI_RawTouchUpdate: fields[ETYPE] = "XI_RawTouchUpd"; break; + default: + { + static char ee[100]; + sprintf (ee, "XI EVENT %2d", xev->xany.type); + fields[ETYPE] = ⅇ + fields[ESERIAL] = &xev->xany.serial; + fields[EWIN] = &xev->xany.window; + } + break; + } + + fields[ESERIAL] = &xev->xany.serial; + fields[ETIME] = &re->time; + fields[EWIN] = &de->event; + fields[EROOT] = &de->root; + fields[ESUB] = &de->child; + fields[EX] = &de->event_x; + fields[EY] = &de->event_y; + fields[EXR] = &de->root_x; + fields[EYR] = &de->root_y; + fields[ERAW0] = &re->raw_values[0]; + fields[ERAW1] = &re->raw_values[1]; + fields[EFLAGS] = &re->flags; + fields[ESTATE] = &de->mods.effective; + fields[EKEYCODE] = &re->detail; + /* ignoring XIValuatorState valuators */ + + switch (xev->xcookie.evtype) { + case XI_RawKeyPress: + case XI_RawKeyRelease: + { + XKeyEvent xkey = { 0, }; + static XComposeStatus compose = { 0, }; + KeySym keysym = 0; + static char c[100]; + int n; + xkey.type = (de->evtype == XI_RawKeyPress ? KeyPress : KeyRelease); + xkey.serial = de->serial; + xkey.display = de->display; + xkey.window = de->event; + xkey.root = de->root; + xkey.subwindow = de->child; + xkey.time = de->time; + xkey.state = de->mods.effective; + xkey.keycode = de->detail; + n = XLookupString (&xkey, c, sizeof(c)-1, &keysym, &compose); + c[n] = 0; + asciify (c, n); + fields[EKEY] = c; + } + break; + case XI_RawButtonPress: + case XI_RawButtonRelease: + { + static char c[10]; + sprintf (c, "b%d", re->detail); + fields[EKEY] = &c; + } + break; + default: break; + } + + DONE: + + if (fields[ETYPE]) + { + char buf[10240]; + char *s = buf; + coltype t; + *s = 0; + for (t = 0; t < EEND; t++) + { + Bool ok = validate_field (dpy, t, fields[t]); + + if (t > 0) { *s++ = ' '; *s = 0; } + + if (!ok) + { + strcat (s, BLD); + strcat (s, RED); + s += strlen(s); + } + + print_field (s, t, fields[t]); + s += strlen(s); + + if (!ok) + { + strcat (s, RST); + s += strlen(s); + } + } + fprintf (stderr, "%s\n", buf); + } + + { + Time t = (fields[ETIME] ? * (Time *) fields[ETIME] : 0); + push_history (t, xev); + } +} + + int main (int argc, char **argv) { @@ -76,8 +604,11 @@ main (int argc, char **argv) Bool mouse_sync_p = False; Bool kbd_sync_p = False; int i; + char *s; progname = argv[0]; + s = strrchr (progname, '/'); + if (s) progname = s+1; for (i = 1; i < argc; i++) { @@ -104,9 +635,18 @@ main (int argc, char **argv) else if (!strcmp (argv[i], "-mouse-async") || !strcmp (argv[i], "-pointer-async")) mouse_sync_p = False; + else if (!strcmp (argv[i], "-sync")) + kbd_sync_p = mouse_sync_p = True; + else if (!strcmp (argv[i], "-async")) + kbd_sync_p = mouse_sync_p = False; else { fprintf (stderr, "%s: unknown option: %s\n", blurb(), oa); + fprintf (stderr, "usage: %s " + "[--grab] [--sync | --async]" + "\n\t\t [--grab-kbd] [--kbd-sync | --kbd-async]" + "\n\t\t [--grab-mouse] [--mouse-sync | --mouse-async]\n", + progname); exit (1); } } @@ -119,6 +659,10 @@ main (int argc, char **argv) if (! init_xinput (dpy, &xi_opcode)) exit (1); + fprintf (stderr, "\n%s: Make your window wide. " + "Bogus values are " BLD RED "RED" RST ".\n", + blurb()); + if (grab_kbd_p || grab_mouse_p) { int timeout = 15; @@ -180,125 +724,13 @@ main (int argc, char **argv) XtAppAddTimeOut (app, 1000 * timeout, ungrab_timer, (XtPointer) dpy); } + print_header(); while (1) { - XEvent xev; - XIRawEvent *re; - + XEvent xev = { 0, }; XtAppNextEvent (app, &xev); XtDispatchEvent (&xev); - - switch (xev.xany.type) { - case KeyPress: - case KeyRelease: - { - static XComposeStatus compose = { 0, }; - KeySym keysym = 0; - char c[100]; - int n; - n = XLookupString (&xev.xkey, c, sizeof(c)-1, &keysym, &compose); - c[n] = 0; - fprintf (stderr, "%s: X11 Key%s %02x %02x %s \"%s\"\n", blurb(), - (xev.xkey.type == KeyPress ? "Press " : "Release"), - xev.xkey.keycode, xev.xkey.state, - XKeysymToString (keysym), c); - } - break; - case ButtonPress: - case ButtonRelease: - fprintf (stderr, "%s: X11 Button%s %d %d\n", blurb(), - (xev.xany.type == ButtonPress ? "Press " : "Release"), - xev.xbutton.button, xev.xbutton.state); - break; - case MotionNotify: - fprintf (stderr, "%s: X11 MotionNotify %4d, %-4d\n", - blurb(), xev.xmotion.x_root, xev.xmotion.y_root); - break; - case GenericEvent: - break; - case EnterNotify: - case LeaveNotify: - break; - default: - fprintf (stderr, "%s: X11 event %d on 0x%lx\n", - blurb(), xev.xany.type, xev.xany.window); - break; - } - - if (xev.xcookie.type != GenericEvent || - xev.xcookie.extension != xi_opcode) - continue; /* not an XInput event */ - if (!xev.xcookie.data) - XGetEventData (dpy, &xev.xcookie); - if (!xev.xcookie.data) - continue; /* Bogus XInput event */ - - re = xev.xcookie.data; - switch (xev.xcookie.evtype) { - case XI_RawKeyPress: - case XI_RawKeyRelease: - { - /* Fake up an XKeyEvent in order to call XKeysymToString(). */ - XEvent ev2; - Bool ok = xinput_event_to_xlib (xev.xcookie.evtype, - (XIDeviceEvent *) re, - &ev2); - if (!ok) - fprintf (stderr, "%s: unable to translate XInput2 event\n", - blurb()); - else - { - static XComposeStatus compose = { 0, }; - KeySym keysym = 0; - char c[100]; - int n; - n = XLookupString (&ev2.xkey, c, sizeof(c)-1, &keysym, &compose); - c[n] = 0; - fprintf (stderr, "%s: XI_RawKey%s %02x %02x %s \"%s\"\n", - blurb(), - (ev2.xkey.type == KeyPress ? "Press " : "Release"), - ev2.xkey.keycode, ev2.xkey.state, - XKeysymToString (keysym), c); - } - } - break; - case XI_RawButtonPress: - case XI_RawButtonRelease: - fprintf (stderr, "%s: XI_RawButton%s %d\n", blurb(), - (re->evtype == XI_RawButtonPress ? "Press " : "Release"), - re->detail); - break; - case XI_RawMotion: - { - Window root_ret, child_ret; - int root_x, root_y; - int win_x, win_y; - unsigned int mask; - XQueryPointer (dpy, DefaultRootWindow (dpy), - &root_ret, &child_ret, &root_x, &root_y, - &win_x, &win_y, &mask); - fprintf (stderr, "%s: XI_RawMotion %4d, %-4d %7.02f, %-7.02f\n", - blurb(), - root_x, root_y, - re->raw_values[0], re->raw_values[1]); - } - break; - case XI_RawTouchBegin: - fprintf (stderr, "%s: XI_RawTouchBegin\n", blurb()); - break; - case XI_RawTouchEnd: - fprintf (stderr, "%s: XI_RawTouchEnd", blurb()); - break; - case XI_RawTouchUpdate: - fprintf (stderr, "%s: XI_RawTouchUpdate", blurb()); - break; - - default: - fprintf (stderr, "%s: XInput unknown event %d\n", blurb(), - xev.xcookie.evtype); - break; - } - + print_event (dpy, &xev, xi_opcode); XFreeEventData (dpy, &xev.xcookie); } diff --git a/driver/xinput.c b/driver/xinput.c index c9e8b91e..9402a4fe 100644 --- a/driver/xinput.c +++ b/driver/xinput.c @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright © 1991-2021 Jamie Zawinski +/* xscreensaver, Copyright © 1991-2022 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -35,7 +35,6 @@ extern Bool debug_p; Bool init_xinput (Display *dpy, int *opcode_ret) { - int nscreens = ScreenCount (dpy); XIEventMask evmasks[1]; unsigned char mask1[(XI_LASTEVENT + 7)/8]; int major, minor; @@ -78,14 +77,13 @@ init_xinput (Display *dpy, int *opcode_ret) evmasks[0].mask_len = sizeof(mask1); evmasks[0].mask = mask1; - for (i = 0; i < nscreens; i++) + /* Only select events on screen 0 -- if we select on each screen, + we get duplicate events. */ + if (XISelectEvents (dpy, RootWindow (dpy, 0), evmasks, countof(evmasks)) + != Success) { - Window root = RootWindow (dpy, i); - if (XISelectEvents (dpy, root, evmasks, countof(evmasks)) != Success) - { - fprintf (stderr, "%s: XISelectEvents failed\n", blurb()); - return False; - } + fprintf (stderr, "%s: XISelectEvents failed\n", blurb()); + return False; } XFlush (dpy); @@ -117,62 +115,11 @@ init_xinput (Display *dpy, int *opcode_ret) } -/* If there is more than one Screen on the Display, XInput2 sends a duplicate - event for each Screen. You'd think that they would have the 'root' member - set to the root window of that screen, so that we could ignore events not - destined for our screen, but no, they all have the same root window. But - they also have the same 'serial' and 'time', so (in theory) we can ignore - the duplicates by noticing recently-duplicated event serial numbers, which - ought never happen. BUT...! - */ -static Bool -duplicate_xinput_event_p (int evtype, XIDeviceEvent *in) -{ - static unsigned long dups[50] = { 0, }; - int i; - - /* Great news, everybody: XEvent.xany.serial is apparently not unique. Wny? - Because fuck you that's why. XtAppNextEvent is returning a RawKeyRelease - followed by a RawKeyPress with the same serial. It doesn't happen every - time, but seems to happen most often if a second key goes down before the - first key is released, e.g., which often happens when typing fast. - - I have not seen it duplicating serials between two different KeyPress - events, but I have seen it being duplicated between a KeyPress and a - non-corresponding KeyRelease event; and between two different KeyRelease - events. It does this even when there is only one Screen. - - So we must compare both 'serial' and 'type' when looking for duplicates. - This should be ok if it really does not duplicate serials between - unrelated KeyPress events. And we ignore KeyRelease events, so what - happens with those doesn't matter. - - Between this shit and the random noise that shows up in XIDeviceEvent, - I'm starting to suspect that maybe, just maybe, the XInput2 library is - extremely careless about memory management! - */ - unsigned long key = (in->serial & 0xFFFF) | (evtype << 16); - - for (i = 0; i < countof(dups); i++) - if (dups[i] == key) - { - if (debug_p) - fprintf (stderr, "%s: discard duplicate XInput event %08lx\n", - blurb(), key); - return True; - } - for (i = 0; i < countof(dups)-1; i++) - dups[i] = dups[i+1]; - dups[i] = key; - return False; -} - - /* Convert an XInput2 event to corresponding old-school Xlib event. Returns true on success. */ -static Bool -xinput_event_to_xlib_1 (int evtype, XIDeviceEvent *in, XEvent *out) +Bool +xinput_event_to_xlib (int evtype, XIDeviceEvent *in, XEvent *out) { Display *dpy = in->display; Bool ok = False; @@ -194,16 +141,24 @@ xinput_event_to_xlib_1 (int evtype, XIDeviceEvent *in, XEvent *out) are a bitwise OR of the three above - which is essentially equivalent to the modifiers state supplied in the core protocol events." - However, I'm seeing random noise in the various XIDeviceEvent.mods fields. - Nonsensical values like base = 0x6045FB3D. So, let's poll the actual - modifiers from XQueryPointer. This can race: maybe the modifier state - changed between when the server generated the keyboard event, and when - we receive it and poll. However, if an actual human is typing and - releasing their modifier keys on such a tight timeframe... that's - probably already not going well. - - I'm also seeing random noise in the event_xy and root_xy fields in - motion events. So just always use XQueryPointer. + However, it appears that the XInput2 library is returning uninitialized + data for *many* of the components of its XIDeviceEvent responses. In + particular, the XIModifierState fields have ludicrously large and + incorrect values like 0x6045FB3D; and the root_x/y and event_x/y values + on XI_RawButton* and XI_RawMotion events are always nonsense. + + This is very worrying, as it suggests that the XInput2 extension is + returning uninitialized or freed memory from the X11 server process. + Build and run the "driver/test-xinput" program for an easy way to see + this bug in action. + + To work around this, we just always get the current modifier state and + mouse position by calling XQueryPointer instead of reading the fields + from the event structures. (This can technically race: maybe the + modifier state changed between when the server generated the keyboard + event, and when we receive it and poll. But we're talking nanoseconds + here: the window for that race is way smaller than the precision of human + finger muscles.) */ switch (evtype) { case XI_RawKeyPress: @@ -272,6 +227,23 @@ xinput_event_to_xlib_1 (int evtype, XIDeviceEvent *in, XEvent *out) out->xmotion.state = mods; ok = True; break; + case XI_RawTouchBegin: + case XI_RawTouchEnd: + out->xbutton.type = (evtype == XI_RawTouchBegin + ? ButtonPress : ButtonRelease); + out->xbutton.display = in->display; + out->xbutton.window = in->event; + out->xbutton.root = in->root; + out->xbutton.subwindow = in->child; + out->xbutton.time = in->time; + out->xbutton.x = root_x; + out->xbutton.y = root_y; + out->xbutton.x_root = root_x; + out->xbutton.y_root = root_y; + out->xbutton.state = mods; + out->xbutton.button = in->detail; + ok = True; + break; default: break; } @@ -279,16 +251,6 @@ xinput_event_to_xlib_1 (int evtype, XIDeviceEvent *in, XEvent *out) return ok; } -Bool -xinput_event_to_xlib (int evtype, XIDeviceEvent *in, XEvent *out) -{ - Bool ok = xinput_event_to_xlib_1 (evtype, in, out); - if (ok && duplicate_xinput_event_p (evtype, in)) - ok = False; - return ok; -} - - static void print_kbd_event (XEvent *xev, XComposeStatus *compose, Bool x11_p) @@ -382,9 +344,9 @@ print_xinput_event (Display *dpy, XEvent *xev, const char *desc) { /* Fake up an XKeyEvent in order to call XKeysymToString(). */ XEvent ev2; - Bool ok = xinput_event_to_xlib_1 (re->evtype, - (XIDeviceEvent *) re, - &ev2); + Bool ok = xinput_event_to_xlib (re->evtype, + (XIDeviceEvent *) re, + &ev2); if (!ok) fprintf (stderr, "%s: unable to translate XInput2 event\n", blurb()); else @@ -401,9 +363,20 @@ print_xinput_event (Display *dpy, XEvent *xev, const char *desc) case XI_RawButtonPress: case XI_RawButtonRelease: - fprintf (stderr, "%s: XI RawButton%s %d\n", blurb(), - (re->evtype == XI_RawButtonPress ? "Press " : "Release"), - re->detail); + { + Window root_ret, child_ret; + int root_x, root_y; + int win_x, win_y; + unsigned int mask; + XQueryPointer (dpy, DefaultRootWindow (dpy), + &root_ret, &child_ret, &root_x, &root_y, + &win_x, &win_y, &mask); + fprintf (stderr, "%s: XI _RawButton%s %4d, %-4d %7.02f, %-7.02f\n", + blurb(), + (re->evtype == XI_RawButtonPress ? "Press " : "Release"), + root_x, root_y, + re->raw_values[0], re->raw_values[1]); + } break; case XI_RawMotion: diff --git a/driver/xinput.h b/driver/xinput.h index 2ee20ee4..75ef2753 100644 --- a/driver/xinput.h +++ b/driver/xinput.h @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright © 1991-2021 Jamie Zawinski +/* xscreensaver, Copyright © 1991-2022 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that diff --git a/driver/xscreensaver-auth.c b/driver/xscreensaver-auth.c index 4344d206..b5cce926 100644 --- a/driver/xscreensaver-auth.c +++ b/driver/xscreensaver-auth.c @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright © 1991-2021 Jamie Zawinski +/* xscreensaver, Copyright © 1991-2022 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -175,7 +175,7 @@ main (int argc, char **argv) Widget root_widget; char *dpy_str = getenv ("DISPLAY"); Bool xsync_p = False; - Bool splash_p = False; + int splash_p = 0; Bool init_p = False; int i; @@ -231,7 +231,7 @@ main (int argc, char **argv) !strcmp (argv[i], "-synchronise")) xsync_p = True; else if (!strcmp (argv[i], "-splash")) - splash_p = True; + splash_p++; /* 0, 1 or 2 */ else if (!strcmp (argv[i], "-init")) init_p = True; else if (!strcmp (argv[i], "-h") || !strcmp (argv[i], "-help")) @@ -266,7 +266,7 @@ main (int argc, char **argv) } # ifdef HAVE_PROC_OOM - if (splash_p || init_p) + if (splash_p == 1 || init_p) oom_assassin_immunity (); # endif @@ -318,7 +318,8 @@ main (int argc, char **argv) if (splash_p) { - xscreensaver_splash (root_widget); + /* Settings button is disabled with --splash --splash */ + xscreensaver_splash (root_widget, splash_p > 1); exit (0); } else if (xscreensaver_auth ((void *) root_widget, diff --git a/driver/xscreensaver-gfx.c b/driver/xscreensaver-gfx.c index 5a543a42..2d2f55e8 100644 --- a/driver/xscreensaver-gfx.c +++ b/driver/xscreensaver-gfx.c @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright © 1991-2021 Jamie Zawinski +/* xscreensaver, Copyright © 1991-2022 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -36,6 +36,10 @@ #include #include +#ifndef HAVE_XINPUT +# error The XInput2 extension is required +#endif + #include #ifdef HAVE_RANDR @@ -86,12 +90,16 @@ maybe_reload_init_file (saver_info *si) saver_preferences *p = &si->prefs; if (init_file_changed_p (p)) { + Bool ov = p->verbose_p; if (p->verbose_p) fprintf (stderr, "%s: file \"%s\" has changed, reloading\n", blurb(), init_file_name()); load_init_file (si->dpy, p); + if (ov) + p->verbose_p = True; + /* If the DPMS settings in the init file have changed, change the settings on the server to match. This also would have happened at the watchdog timer. */ diff --git a/driver/xscreensaver-systemd.c b/driver/xscreensaver-systemd.c index 2a5a11ff..2c04f13a 100644 --- a/driver/xscreensaver-systemd.c +++ b/driver/xscreensaver-systemd.c @@ -160,6 +160,16 @@ * playing audio. Unlike Firefox, it sends exactly the same "reason" * string as it does when playing video, so we can't tell them apart. * + * Another Annoying Chromium Bug: + * + * Twitter (and many other sites) auto-convert GIFs to looping MP4s to + * save bandwidth. Chromium inhibits the screen saver any time a Twitter + * GIF is on screen (either in the browser or in Tweetdeck). + * + * The proper way for Chrome to fix this would be to stop inhibiting once + * the video loops. That way your multi-hour movie inhibits properly, but + * your looping GIF only inhibits for the first few seconds. + * * ***************************************************************************** * @@ -561,7 +571,7 @@ xscreensaver_method_uninhibit (sd_bus_message *m, void *arg, { struct handler_ctx *ctx = arg; uint32_t cookie; - struct inhibit_entry *entry; + struct inhibit_entry *entry, *entry_next; int found = 0; const char *sender; @@ -574,7 +584,7 @@ xscreensaver_method_uninhibit (sd_bus_message *m, void *arg, sender = sd_bus_message_get_sender (m); - SLIST_FOREACH(entry, &inhibit_head, entries) { + SLIST_FOREACH_SAFE(entry, &inhibit_head, entries, entry_next) { if (entry->cookie == cookie) { if (verbose_p) fprintf (stderr, "%s: uninhibited by \"%s\" (%s) with cookie %08X\n", @@ -815,7 +825,7 @@ xscreensaver_systemd_loop (void) while (1) { struct pollfd fds[3]; uint64_t poll_timeout_msec, system_timeout_usec, user_timeout_usec; - struct inhibit_entry *entry; + struct inhibit_entry *entry, *entry_next; /* We MUST call sd_bus_process() on each bus at least once before calling sd_bus_get_events(), so just always start the event loop by processing @@ -843,7 +853,7 @@ xscreensaver_systemd_loop (void) That would have left us inhibited forever, even if the inhibiting program was re-launched, since the new instance won't have the same cookie. */ - SLIST_FOREACH (entry, &inhibit_head, entries) { + SLIST_FOREACH_SAFE (entry, &inhibit_head, entries, entry_next) { if (entry->peer && !sd_bus_track_count_name (ctx->track, entry->peer)) { if (verbose_p) diff --git a/driver/xscreensaver.c b/driver/xscreensaver.c index 76402bb1..f5a1fccf 100644 --- a/driver/xscreensaver.c +++ b/driver/xscreensaver.c @@ -1,4 +1,4 @@ -/* xscreensaver, Copyright © 1991-2021 Jamie Zawinski +/* xscreensaver, Copyright © 1991-2022 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -225,6 +225,10 @@ # include /* for waitpid() and associated macros */ #endif +#ifndef HAVE_XINPUT +# error The XInput2 extension is required +#endif + #include #include #include @@ -1925,6 +1929,9 @@ main_loop (Display *dpy) case XI_RawKeyRelease: case XI_RawButtonPress: case XI_RawButtonRelease: + case XI_RawTouchBegin: + case XI_RawTouchEnd: + case XI_RawTouchUpdate: if (current_state != AUTH && /* logged by xscreensaver-auth */ (verbose_p > 1 || (verbose_p && now - active_at > 1))) @@ -2355,6 +2362,7 @@ main (int argc, char **argv) { logfile = argv[++i]; if (!logfile) goto HELP; + verbose_p = cmdline_verbose_p = cmdline_verbose_val = True; } else if (!strcmp (argv[i], "-d") || !strcmp (argv[i], "-dpy") || diff --git a/hacks/Makefile.in b/hacks/Makefile.in index 21b9ef38..d3b2872d 100644 --- a/hacks/Makefile.in +++ b/hacks/Makefile.in @@ -101,7 +101,7 @@ SRCS = xscreensaver-getimage.c \ rocks.c rorschach.c screenhack.c sierpinski.c slidescreen.c \ slip.c sphere.c spiral.c strange.c swirl.c xlockmore.c \ fps.c goop.c starfish.c munch.c fadeplot.c \ - rd-bomb.c coral.c mountain.c triangle.c lissie.c worm.c \ + rdbomb.c coral.c mountain.c triangle.c lissie.c worm.c \ rotor.c ant.c xjack.c xlyap.c \ cynosure.c moire2.c flow.c epicycle.c interference.c \ truchet.c bsod.c crystal.c discrete.c distort.c kumppa.c \ @@ -140,7 +140,7 @@ OBJS = attraction.o blitspin.o bouboule.o braid.o bubbles.o \ rocks.o rorschach.o screenhack.o sierpinski.o slidescreen.o \ slip.o sphere.o spiral.o strange.o swirl.o xlockmore.o \ fps.o goop.o starfish.o munch.o fadeplot.o \ - rd-bomb.o coral.o mountain.o triangle.o lissie.o worm.o \ + rdbomb.o coral.o mountain.o triangle.o lissie.o worm.o \ rotor.o ant.o xjack.o xlyap.o xscreensaver-getimage.o \ cynosure.o moire2.o flow.o epicycle.o interference.o \ truchet.o bsod.o crystal.o discrete.o distort.o kumppa.o \ @@ -171,7 +171,7 @@ EXES = attraction blitspin bouboule braid decayscreen deco \ maze moire noseguy pedal \ penrose pyro qix rocks rorschach sierpinski slidescreen \ slip strange swirl goop starfish munch \ - fadeplot rd-bomb coral mountain triangle \ + fadeplot rdbomb coral mountain triangle \ xjack xlyap cynosure moire2 flow epicycle \ interference truchet bsod crystal discrete distort kumppa \ demon loop penetrate deluxe compass squiral xflame \ @@ -226,7 +226,7 @@ MEN = anemone.man apollonian.man attraction.man \ loop.man maze.man moire.man \ moire2.man mountain.man munch.man nerverot.man noseguy.man \ pedal.man penetrate.man penrose.man petri.man phosphor.man \ - polyominoes.man pyro.man qix.man rd-bomb.man ripples.man \ + polyominoes.man pyro.man qix.man rdbomb.man ripples.man \ rocks.man rorschach.man rotzoomer.man \ shadebobs.man sierpinski.man slidescreen.man slip.man \ speedmine.man \ @@ -641,7 +641,7 @@ starfish: starfish.o $(HACK_OBJS) $(COL) $(SPL) munch: munch.o $(HACK_OBJS) $(COL) $(SPL) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(SPL) $(UTILS_BIN)/pow2.o $(HACK_LIBS) -rd-bomb: rd-bomb.o $(HACK_OBJS) $(COL) $(SHM) +rdbomb: rdbomb.o $(HACK_OBJS) $(COL) $(SHM) $(CC_HACK) -o $@ $@.o $(HACK_OBJS) $(COL) $(SHM) $(HACK_LIBS) $(THRL) coral: coral.o $(HACK_OBJS) $(COL) $(ERASE) @@ -2742,21 +2742,21 @@ qix.o: $(UTILS_SRC)/usleep.h qix.o: $(UTILS_SRC)/visual.h qix.o: $(UTILS_SRC)/xft.h qix.o: $(UTILS_SRC)/yarandom.h -rd-bomb.o: ../config.h -rd-bomb.o: $(srcdir)/fps.h -rd-bomb.o: $(srcdir)/recanim.h -rd-bomb.o: $(srcdir)/screenhackI.h -rd-bomb.o: $(srcdir)/screenhack.h -rd-bomb.o: $(UTILS_SRC)/colors.h -rd-bomb.o: $(UTILS_SRC)/font-retry.h -rd-bomb.o: $(UTILS_SRC)/grabscreen.h -rd-bomb.o: $(UTILS_SRC)/hsv.h -rd-bomb.o: $(UTILS_SRC)/resources.h -rd-bomb.o: $(UTILS_SRC)/usleep.h -rd-bomb.o: $(UTILS_SRC)/visual.h -rd-bomb.o: $(UTILS_SRC)/xft.h -rd-bomb.o: $(UTILS_SRC)/xshm.h -rd-bomb.o: $(UTILS_SRC)/yarandom.h +rdbomb.o: ../config.h +rdbomb.o: $(srcdir)/fps.h +rdbomb.o: $(srcdir)/recanim.h +rdbomb.o: $(srcdir)/screenhackI.h +rdbomb.o: $(srcdir)/screenhack.h +rdbomb.o: $(UTILS_SRC)/colors.h +rdbomb.o: $(UTILS_SRC)/font-retry.h +rdbomb.o: $(UTILS_SRC)/grabscreen.h +rdbomb.o: $(UTILS_SRC)/hsv.h +rdbomb.o: $(UTILS_SRC)/resources.h +rdbomb.o: $(UTILS_SRC)/usleep.h +rdbomb.o: $(UTILS_SRC)/visual.h +rdbomb.o: $(UTILS_SRC)/xft.h +rdbomb.o: $(UTILS_SRC)/xshm.h +rdbomb.o: $(UTILS_SRC)/yarandom.h recanim.o: ../config.h recanim.o: $(srcdir)/fps.h recanim.o: $(srcdir)/recanim.h diff --git a/hacks/analogtv-cli.c b/hacks/analogtv-cli.c index 975c79ad..18dea693 100644 --- a/hacks/analogtv-cli.c +++ b/hacks/analogtv-cli.c @@ -1,4 +1,4 @@ -/* xanalogtv-cli, Copyright © 2018-2021 Jamie Zawinski +/* xanalogtv-cli, Copyright © 2018-2022 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -445,8 +445,9 @@ update_smpte_colorbars(analogtv_input *input) { double aspect = (double) st->output_frame->width / st->output_frame->height; - int w2 = st->tv->xgwa.width * 0.35; - int h2 = st->tv->xgwa.height * 0.35 * aspect; + double scale = (aspect > 1 ? 0.35 : 0.6); + int w2 = st->tv->xgwa.width * scale; + int h2 = st->tv->xgwa.height * scale * aspect; analogtv_load_ximage (st->tv, input, st->logo, st->logo_mask, (st->tv->xgwa.width - w2) / 2, st->tv->xgwa.height * 0.20, @@ -516,7 +517,7 @@ analogtv_save_frame (struct state *st, const char *outfile, # endif /* ! HAVE_LIBPNG */ fclose (f); - if (verbose_p > 1) + if (verbose_p > 2) fprintf (stderr, "%s: wrote %s\n", progname, pngfile); free (pngfile); } @@ -531,7 +532,7 @@ delete_tmp_files(void) for (i = 0; i <= st->frames_written; i++) { sprintf (outfile, st->framefile_fmt, i); - if (verbose_p > 2) + if (verbose_p > 3) fprintf (stderr, "%s: rm %s\n", progname, outfile); unlink (outfile); } @@ -926,7 +927,18 @@ analogtv_convert (const char **infiles, const char *outfile, st->curinputi = 0; } else { /* Otherwise random */ + int prev = st->curinputi; + AGAIN: st->curinputi = 1 + (random() % (N_CHANNELS - 1)); + + /* In single mode, always alternate to the unadulterated image: + no two noisy images in a row, always intersperse clean. */ + if (singlep && prev != 0) + st->curinputi = 0; + + /* In single mode, do colorbars-only a bit less often. */ + if (singlep && st->curinputi == 1 && !(random() % 3)) + goto AGAIN; } stats[st->curinputi]++; @@ -935,7 +947,7 @@ analogtv_convert (const char **infiles, const char *outfile, st->tv->channel_change_cycles=200000; if (verbose_p > 1) - fprintf (stderr, "%s: %.1f: channel %d\n", + fprintf (stderr, "%s: %5.1f sec: channel %d\n", progname, curticks/1000.0, st->curinputi); /* Turn the knobs every now and then */ diff --git a/hacks/bsod.c b/hacks/bsod.c index 06fcb91c..c98495d4 100644 --- a/hacks/bsod.c +++ b/hacks/bsod.c @@ -641,7 +641,10 @@ bsod_pop (struct bsod_state *bst) /* Reset the string back to the beginning, in case we loop. */ bst->queue[bst->pos].arg2 = bst->queue[bst->pos].arg1; bst->queue[bst->pos].arg3 = 0; - bst->queue[bst->pos].type = (bsod_event_type) + /* I have no idea what this means, but the extra cast seems to + silence it: "warning: cast to smaller integer type + 'bsod_event_type' from 'void *' [-Wvoid-pointer-to-enum-cast]" */ + bst->queue[bst->pos].type = (bsod_event_type) (size_t) bst->queue[bst->pos].arg4; bst->pos++; bst->current_left = bst->left_margin + bst->xoff; @@ -895,7 +898,11 @@ bsod_pop (struct bsod_state *bst) case RIGHT: case RIGHT_FULL: bst->queue[i].arg2 = bst->queue[i].arg1; bst->queue[i].arg3 = 0; - bst->queue[i].type = (bsod_event_type) bst->queue[i].arg4; + /* I have no idea what this means, but the extra cast seems to + silence it: "warning: cast to smaller integer type + 'bsod_event_type' from 'void *' [-Wvoid-pointer-to-enum-cast]" */ + bst->queue[i].type = (bsod_event_type) (size_t) + bst->queue[i].arg4; break; default: break; } diff --git a/hacks/check-configs.pl b/hacks/check-configs.pl index 47cb25aa..6957cab9 100755 --- a/hacks/check-configs.pl +++ b/hacks/check-configs.pl @@ -21,7 +21,7 @@ use diagnostics; use strict; my $progname = $0; $progname =~ s@.*/@@g; -my ($version) = ('$Revision: 1.37 $' =~ m/\s(\d[.\d]+)\s/s); +my ($version) = ('$Revision: 1.38 $' =~ m/\s(\d[.\d]+)\s/s); my $verbose = 0; my $debug_p = 0; @@ -73,7 +73,6 @@ sub parse_src($) { $file = 'b_lockglue.c' if ($file eq 'bubble3d.c'); $file = 'polyhedra-gl.c' if ($file eq 'polyhedra.c'); $file = 'companion.c' if ($file eq 'companioncube.c'); - $file = 'rd-bomb.c' if ($file eq 'rdbomb.c'); my $ofile = $file; $file = "glx/$ofile" unless (-f $file); @@ -735,7 +734,6 @@ sub build_android(@) { foreach my $saver (@savers) { next if ($saver =~ m/(-helper)$/); - $saver = 'rdbomb' if ($saver eq 'rd-bomb'); my ($src_opts, $switchmap) = parse_src ($saver); my ($saver_title, $gl_p, $xml_opts, $widgets) = diff --git a/hacks/config/README b/hacks/config/README index cfd3d9bf..fbb2af3b 100644 --- a/hacks/config/README +++ b/hacks/config/README @@ -4,8 +4,8 @@ a screen saver and locker for the X window system by Jamie Zawinski - version 6.02 - 11-Oct-2021 + version 6.03 + 27-Feb-2022 https://www.jwz.org/xscreensaver/ diff --git a/hacks/config/crystal.xml b/hacks/config/crystal.xml index ab1f1dd7..63e1bdda 100644 --- a/hacks/config/crystal.xml +++ b/hacks/config/crystal.xml @@ -38,8 +38,9 @@ <_description> -Moving polygons, similar to a kaleidoscope. See also the -"Kaleidescope" and "GLeidescope" screen savers. +Moving polygons, similar to a kaleidoscope. + +See also the "Kaleidescope" and "GLeidescope" screen savers. https://en.wikipedia.org/wiki/Kaleidoscope diff --git a/hacks/config/cube21.xml b/hacks/config/cube21.xml index 17082db3..db7c1136 100644 --- a/hacks/config/cube21.xml +++ b/hacks/config/cube21.xml @@ -67,8 +67,9 @@ <_description> The "Cube 21" Rubik-like puzzle, also known as "Square-1". -The rotations are chosen randomly. See also the "Rubik", -"RubikBlocks" and "GLSnake" screen savers. +The rotations are chosen randomly. + +See also the "Rubik", "RubikBlocks" and "GLSnake" screen savers. https://en.wikipedia.org/wiki/Square_One_%28puzzle%29 diff --git a/hacks/config/energystream.xml b/hacks/config/energystream.xml index c9f89660..3bb878ac 100644 --- a/hacks/config/energystream.xml +++ b/hacks/config/energystream.xml @@ -11,8 +11,8 @@ low="0.01" high="5.0" default="1.0"/>
- - + +
diff --git a/hacks/config/eruption.xml b/hacks/config/eruption.xml index da778fe8..74684a6f 100644 --- a/hacks/config/eruption.xml +++ b/hacks/config/eruption.xml @@ -45,8 +45,9 @@ <_description> -Exploding fireworks. See also the "Fireworkx", "XFlame" and "Pyro" -screen savers. +Exploding fireworks. + +See also the "Fireworkx", "XFlame" and "Pyro" screen savers. Written by W.P. van Paassen; 2003. diff --git a/hacks/config/fireworkx.xml b/hacks/config/fireworkx.xml index 2c8d096e..ac1294be 100644 --- a/hacks/config/fireworkx.xml +++ b/hacks/config/fireworkx.xml @@ -22,8 +22,9 @@ <_description> -Exploding fireworks. See also the "Eruption", "XFlame" and "Pyro" -screen savers. +Exploding fireworks. + +See also the "Eruption", "XFlame" and "Pyro" screen savers. Written by Rony B Chandran; 2004. diff --git a/hacks/config/gears.xml b/hacks/config/gears.xml index a1cbaeb1..7a6ee08e 100644 --- a/hacks/config/gears.xml +++ b/hacks/config/gears.xml @@ -29,7 +29,9 @@ <_description> -Interlocking gears. See also the "Pinion" and "Möbius Gears" screen savers. +Interlocking gears. + +See also the "Pinion" and "Möbius Gears" screen savers. https://en.wikipedia.org/wiki/Involute_gear https://en.wikipedia.org/wiki/Epicyclic_gearing diff --git a/hacks/config/glplanet.xml b/hacks/config/glplanet.xml index 2958d42a..488746fd 100644 --- a/hacks/config/glplanet.xml +++ b/hacks/config/glplanet.xml @@ -23,9 +23,9 @@ diff --git a/hacks/config/mapscroller.xml b/hacks/config/mapscroller.xml new file mode 100644 index 00000000..2e121e79 --- /dev/null +++ b/hacks/config/mapscroller.xml @@ -0,0 +1,118 @@ + + + + + + + diff --git a/hacks/config/rd-bomb.xml b/hacks/config/rdbomb.xml similarity index 97% rename from hacks/config/rd-bomb.xml rename to hacks/config/rdbomb.xml index a6cc47db..e29dff71 100644 --- a/hacks/config/rd-bomb.xml +++ b/hacks/config/rdbomb.xml @@ -1,6 +1,6 @@ - + diff --git a/hacks/config/sphereeversion.xml b/hacks/config/sphereeversion.xml index 365db9ba..b1ba0b9c 100644 --- a/hacks/config/sphereeversion.xml +++ b/hacks/config/sphereeversion.xml @@ -9,18 +9,16 @@
+ + - - @@ -33,21 +31,23 @@ + + + + + + + + + + + + + + + + + + diff --git a/hacks/glx/Makefile.in b/hacks/glx/Makefile.in index ed07a1fe..64a881c8 100644 --- a/hacks/glx/Makefile.in +++ b/hacks/glx/Makefile.in @@ -1,4 +1,4 @@ -# hacks/glx/Makefile.in --- xscreensaver, Copyright © 1999-2021 Jamie Zawinski. +# hacks/glx/Makefile.in --- xscreensaver, Copyright © 1999-2022 Jamie Zawinski. # the `../../configure' script generates `hacks/glx/Makefile' from this file. @SET_MAKE@ @@ -42,6 +42,7 @@ SHELL = /bin/sh INSTALL = @INSTALL@ SUID_FLAGS = -o root -m 4755 INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_SETUID = $(INSTALL_PROGRAM) $(SUID_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_DIRS = @INSTALL_DIRS@ @@ -99,7 +100,7 @@ SRCS = xscreensaver-gl-visual.c normals.c erase-gl.c fps-gl.c \ moebius.c morph3d.c pipeobjs.c pipes.c rubik.c s1_1.c s1_2.c \ s1_3.c s1_4.c s1_5.c s1_6.c s1_b.c shark.c sproingies.c \ sproingiewrap.c stairs.c superquadrics.c swim.c whale.c \ - xlock-gl-utils.c glplanet.c pulsar.c \ + xlock-gl-utils.c glplanet.c timezones.c pulsar.c \ extrusion.c extrusion-helix2.c extrusion-helix3.c \ extrusion-helix4.c extrusion-joinoffset.c extrusion-screw.c \ extrusion-taper.c extrusion-twistoid.c sierpinski3d.c \ @@ -139,8 +140,13 @@ SRCS = xscreensaver-gl-visual.c normals.c erase-gl.c fps-gl.c \ splodesic.c hexstrut.c vigilance.c seccam.c esper.c \ razzledazzle.c ships.c peepers.c crumbler.c quickhull.c \ maze3d.c handsy.c handsy_model.c gravitywell.c deepstars.c \ - gibson.c etruscanvenus.c sphereeversion.c covid19.c \ - co____9.c headroom.c headroom_model.c beats.c glsl-utils.c + gibson.c etruscanvenus.c covid19.c co____9.c \ + headroom.c headroom_model.c beats.c glsl-utils.c \ + sphereeversion.c sphereeversion-analytic.c \ + sphereeversion-corrugations.c \ + mapscroller.c squirtorus.c + +SCRIPTS = mapscroller.pl OBJS = xscreensaver-gl-visual.o normals.o erase-gl.o fps-gl.o \ atlantis.o b_draw.o b_lockglue.o b_sphere.o bubble3d.o \ @@ -148,7 +154,7 @@ OBJS = xscreensaver-gl-visual.o normals.o erase-gl.o fps-gl.o \ moebius.o morph3d.o pipeobjs.o pipes.o rubik.o s1_1.o s1_2.o \ s1_3.o s1_4.o s1_5.o s1_6.o s1_b.o shark.o sproingies.o \ sproingiewrap.o stairs.o superquadrics.o swim.o whale.o \ - xlock-gl-utils.o glplanet.o pulsar.o \ + xlock-gl-utils.o glplanet.o timezones.o pulsar.o \ extrusion.o extrusion-helix2.o extrusion-helix3.o \ extrusion-helix4.o extrusion-joinoffset.o extrusion-screw.o \ extrusion-taper.o extrusion-twistoid.o sierpinski3d.o \ @@ -188,8 +194,11 @@ OBJS = xscreensaver-gl-visual.o normals.o erase-gl.o fps-gl.o \ splodesic.o hexstrut.o vigilance.o seccam.o esper.o \ razzledazzle.o ships.o peepers.o crumbler.o quickhull.o \ maze3d.o handsy.o handsy_model.o gravitywell.o deepstars.o \ - gibson.o etruscanvenus.o sphereeversion.o covid19.o \ - headroom.o headroom_model.o beats.o glsl-utils.o + gibson.o etruscanvenus.o covid19.o headroom.o \ + headroom_model.o beats.o glsl-utils.o \ + sphereeversion.c sphereeversion-analytic.c \ + sphereeversion-corrugations.c \ + mapscroller.o squirtorus.o GL_EXES = cage gears moebius pipes sproingies stairs superquadrics \ morph3d rubik atlantis lament bubble3d glplanet pulsar \ @@ -211,7 +220,8 @@ GL_EXES = cage gears moebius pipes sproingies stairs superquadrics \ hydrostat discoball cubetwist cubestack splodesic \ hexstrut vigilance esper razzledazzle peepers crumbler \ maze3d handsy gravitywell deepstars gibson etruscanvenus \ - sphereeversion covid19 headroom beats + sphereeversion covid19 headroom beats mapscroller \ + squirtorus GLE_EXES = extrusion SUID_EXES = sonar SETCAP_EXES = sonar @@ -257,7 +267,7 @@ HDRS = atlantis.h bubble3d.h buildlwo.h e_textures.h \ glschool_alg.h topblock.h involute.h teapot.h sonar.h \ dropshadow.h starwars.h teapot2.h dnapizza.h curlicue.h \ quickhull.h dymaxionmap-coords.h handsy_anim.h \ - glsl-utils.h + glsl-utils.h mapcities.h sphereeversion.h GL_MEN = xscreensaver-gl-visual.man \ atlantis.man boxed.man bubble3d.man cage.man circuit.man \ cubenetic.man dangerball.man engine.man extrusion.man \ @@ -289,19 +299,20 @@ GL_MEN = xscreensaver-gl-visual.man \ hexstrut.man vigilance.man esper.man razzledazzle.man \ peepers.man crumbler.man maze3d.man handsy.man \ gravitywell.man deepstars.man gibson.man etruscanvenus.man \ - sphereeversion.man covid19.man headroom.man beats.man + sphereeversion.man covid19.man headroom.man beats.man \ + mapscroller.man squirtorus.man MEN = @GL_MEN@ RETIRED_MEN = glforestfire.man EXTRAS = README Makefile.in dxf2gl.pl vrml2gl.pl wfront2gl.pl \ molecules.sh starwars.txt zalgo.txt *.dxf -TARFILES = $(SRCS) $(HDRS) $(GL_MEN) $(RETIRED_MEN) $(EXTRAS) +TARFILES = $(SRCS) $(HDRS) $(SCRIPTS) $(GL_MEN) $(RETIRED_MEN) $(EXTRAS) default: all all: $(EXES) $(RETIRED_EXES) -install: install-program install-xml install-man +install: install-program install-scripts install-xml install-man uninstall: uninstall-program uninstall-xml uninstall-man install-strip: @@ -311,7 +322,7 @@ install-strip: install-program:: $(EXES) @exes="$(HACK_EXES_1) @GL_UTIL_EXES@" ; \ idir="$(install_prefix)$(HACKDIR)" ; \ - if [ "$$exes" != "" ]; then \ + if ( echo $$exes | grep -q . ); then \ if [ ! -d $$idir ]; then \ $(INSTALL_DIRS) $$idir ; \ fi ; \ @@ -361,6 +372,38 @@ install-program:: $(EXES) fi +install-scripts: $(SCRIPTS) munge-scripts + @ \ + if ! ( echo $(HACK_EXES_1) | grep -q . ); then exit 0 ; fi ; \ + if [ ! -d $(install_prefix)$(HACKDIR) ]; then \ + $(INSTALL_DIRS) $(install_prefix)$(HACKDIR) ; \ + fi ; \ + for program in $(SCRIPTS); do \ + if [ -r $$program ] ; then \ + p=$$program ; \ + else \ + p=$(srcdir)/$$program ; \ + fi ; \ + echo $(INSTALL_SCRIPT) $$p \ + $(install_prefix)$(HACKDIR)/$$program ; \ + $(INSTALL_SCRIPT) $$p \ + $(install_prefix)$(HACKDIR)/$$program ; \ + done + +munge-scripts: $(SCRIPTS) + @tmp=/tmp/mf.$$$$ ; \ + perl="${PERL}" ; \ + rm -f $$tmp ; \ + for program in $(SCRIPTS); do \ + sed "s@^\(#!\)\(/[^ ]*/perl[^ ]*\)\(.*\)\$$@\1$$perl\3@" \ + < $(srcdir)/$$program > $$tmp ; \ + if ! cmp -s $(srcdir)/$$program $$tmp ; then \ + echo "$$program: setting interpreter to $$perl" >&2 ; \ + cat $$tmp > ./$$program ; \ + fi ; \ + done ; \ + rm -f $$tmp + # When installing man pages, we install "foo.man" as "foo.N" and update # the .TH line in the installed file with one like # @@ -374,6 +417,8 @@ install-man: $(MEN) V=`sed -n 's/.*xscreensaver \([0-9]\.[^)]*)\).*/\1/p' < $$U` ; \ T=/tmp/xs$$$$.$(mansuffix) ; \ TH=".TH XScreenSaver $(mansuffix) \"$$V\" \"X Version 11\"" ; \ + \ + if ! ( echo $(HACK_EXES_1) | grep -q . ); then exit 0 ; fi ; \ echo "installing man pages: $$TH" ; \ \ if [ ! -d $(install_prefix)$(manNdir) ]; then \ @@ -409,7 +454,7 @@ install-xml: # the hacks, in $HACKDIR uninstall-program:: - @exes="$(HACK_EXES) $(RETIRED_EXES) @GL_UTIL_EXES@" ; \ + @exes="$(HACK_EXES) $(RETIRED_EXES) $(SCRIPTS) @GL_UTIL_EXES@" ;\ idir="$(install_prefix)$(HACKDIR)" ; \ for program in $$exes; do \ echo rm -f $$idir/$$program ; \ @@ -643,7 +688,10 @@ B3D_OBJS = b_sphere.o b_draw.o b_lockglue.o $(HACK_OBJS) bubble3d: bubble3d.o $(B3D_OBJS) $(CC_HACK) -o $@ $@.o $(B3D_OBJS) $(HACK_LIBS) -PLANET_OBJS=sphere.o $(PNG) $(HACK_TRACK_OBJS) +timezones_dxf:: + ./dxf2gl.pl --normalize --wireframe timezones.dxf timezones.c + +PLANET_OBJS=sphere.o gllist.o timezones.o $(PNG) $(HACK_TRACK_OBJS) glplanet: glplanet.o $(PLANET_OBJS) $(CC_HACK) -o $@ $@.o $(PLANET_OBJS) $(PNG_LIBS) @@ -791,8 +839,10 @@ romanboy: romanboy.o $(HACK_TRACK_OBJS) etruscanvenus: etruscanvenus.o $(HACK_TRACK_OBJS) $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS) -sphereeversion: sphereeversion.o $(HACK_TRACK_OBJS) - $(CC_HACK) -o $@ $@.o $(HACK_TRACK_OBJS) $(HACK_LIBS) +SPHEREEV_OBJS=sphereeversion-analytic.o sphereeversion-corrugations.o \ + $(PNG) $(HACK_TRACK_OBJS) +sphereeversion: sphereeversion.o $(SPHEREEV_OBJS) + $(CC_HACK) -o $@ $@.o $(SPHEREEV_OBJS) $(HACK_LIBS) $(PNG_LIBS) glmatrix: glmatrix.o $(PNG) $(HACK_OBJS) $(CC_HACK) -o $@ $@.o $(PNG) $(HACK_OBJS) $(PNG_LIBS) @@ -1055,6 +1105,13 @@ headroom_dxf:: beats: beats.o sphere.o $(HACK_OBJS) $(CC_HACK) -o $@ $@.o sphere.o $(HACK_OBJS) $(HACK_LIBS) +mapscroller: mapscroller.o $(PNG) $(HACK_GRAB_OBJS) + $(CC_HACK) -o $@ $@.o $(PNG) $(HACK_GRAB_OBJS) $(PNG_LIBS) + +SQOBJ = normals.o $(UTILS_BIN)/spline.o +squirtorus: squirtorus.o $(SQOBJ) $(HACK_TRACK_OBJS) + $(CC_HACK) -o $@ $@.o $(SQOBJ) $(HACK_TRACK_OBJS) $(HACK_LIBS) + ############################################################################## # # DO NOT DELETE: updated by make distdepend @@ -2569,6 +2626,7 @@ glmatrix.o: $(HACK_SRC)/xlockmoreI.h glmatrix.o: $(HACK_SRC)/xlockmore.h glplanet.o: ../../config.h glplanet.o: $(HACK_SRC)/fps.h +glplanet.o: $(srcdir)/gllist.h glplanet.o: $(srcdir)/gltrackball.h glplanet.o: ../images/gen/earth_night_png.h glplanet.o: ../images/gen/earth_png.h @@ -3137,6 +3195,26 @@ lockward.o: $(UTILS_SRC)/xft.h lockward.o: $(UTILS_SRC)/yarandom.h lockward.o: $(HACK_SRC)/xlockmoreI.h lockward.o: $(HACK_SRC)/xlockmore.h +mapscroller.o: ../../config.h +mapscroller.o: $(HACK_SRC)/fps.h +mapscroller.o: ../images/gen/oceantiles_12_png.h +mapscroller.o: $(srcdir)/mapcities.h +mapscroller.o: $(HACK_SRC)/recanim.h +mapscroller.o: $(HACK_SRC)/screenhackI.h +mapscroller.o: $(srcdir)/texfont.h +mapscroller.o: $(UTILS_SRC)/colors.h +mapscroller.o: $(UTILS_SRC)/erase.h +mapscroller.o: $(UTILS_SRC)/font-retry.h +mapscroller.o: $(UTILS_SRC)/grabscreen.h +mapscroller.o: $(UTILS_SRC)/hsv.h +mapscroller.o: $(UTILS_SRC)/resources.h +mapscroller.o: $(UTILS_SRC)/usleep.h +mapscroller.o: $(UTILS_SRC)/visual.h +mapscroller.o: $(UTILS_SRC)/xft.h +mapscroller.o: $(UTILS_SRC)/yarandom.h +mapscroller.o: $(HACK_SRC)/ximage-loader.h +mapscroller.o: $(HACK_SRC)/xlockmoreI.h +mapscroller.o: $(HACK_SRC)/xlockmore.h marching.o: ../../config.h marching.o: $(HACK_SRC)/fps.h marching.o: $(srcdir)/marching.h @@ -3956,23 +4034,65 @@ sonar-sim.o: $(UTILS_SRC)/usleep.h sonar-sim.o: $(UTILS_SRC)/visual.h sonar-sim.o: $(UTILS_SRC)/xft.h sonar-sim.o: $(UTILS_SRC)/yarandom.h +sphereeversion-analytic.o: ../../config.h +sphereeversion-analytic.o: $(HACK_SRC)/fps.h +sphereeversion-analytic.o: $(srcdir)/glsl-utils.h +sphereeversion-analytic.o: $(srcdir)/gltrackball.h +sphereeversion-analytic.o: $(HACK_SRC)/recanim.h +sphereeversion-analytic.o: $(HACK_SRC)/screenhackI.h +sphereeversion-analytic.o: $(srcdir)/sphereeversion.h +sphereeversion-analytic.o: $(UTILS_SRC)/colors.h +sphereeversion-analytic.o: $(UTILS_SRC)/erase.h +sphereeversion-analytic.o: $(UTILS_SRC)/font-retry.h +sphereeversion-analytic.o: $(UTILS_SRC)/grabscreen.h +sphereeversion-analytic.o: $(UTILS_SRC)/hsv.h +sphereeversion-analytic.o: $(UTILS_SRC)/resources.h +sphereeversion-analytic.o: $(UTILS_SRC)/usleep.h +sphereeversion-analytic.o: $(UTILS_SRC)/visual.h +sphereeversion-analytic.o: $(UTILS_SRC)/xft.h +sphereeversion-analytic.o: $(UTILS_SRC)/yarandom.h +sphereeversion-analytic.o: $(HACK_SRC)/xlockmoreI.h +sphereeversion-analytic.o: $(HACK_SRC)/xlockmore.h +sphereeversion-corrugations.o: ../../config.h +sphereeversion-corrugations.o: $(HACK_SRC)/fps.h +sphereeversion-corrugations.o: $(srcdir)/glsl-utils.h +sphereeversion-corrugations.o: $(srcdir)/gltrackball.h +sphereeversion-corrugations.o: $(HACK_SRC)/recanim.h +sphereeversion-corrugations.o: $(HACK_SRC)/screenhackI.h +sphereeversion-corrugations.o: $(srcdir)/sphereeversion.h +sphereeversion-corrugations.o: $(UTILS_SRC)/colors.h +sphereeversion-corrugations.o: $(UTILS_SRC)/erase.h +sphereeversion-corrugations.o: $(UTILS_SRC)/font-retry.h +sphereeversion-corrugations.o: $(UTILS_SRC)/grabscreen.h +sphereeversion-corrugations.o: $(UTILS_SRC)/hsv.h +sphereeversion-corrugations.o: $(UTILS_SRC)/resources.h +sphereeversion-corrugations.o: $(UTILS_SRC)/usleep.h +sphereeversion-corrugations.o: $(UTILS_SRC)/visual.h +sphereeversion-corrugations.o: $(UTILS_SRC)/xft.h +sphereeversion-corrugations.o: $(UTILS_SRC)/yarandom.h +sphereeversion-corrugations.o: $(HACK_SRC)/xlockmoreI.h +sphereeversion-corrugations.o: $(HACK_SRC)/xlockmore.h sphereeversion.o: ../../config.h sphereeversion.o: $(HACK_SRC)/fps.h sphereeversion.o: $(srcdir)/glsl-utils.h sphereeversion.o: $(srcdir)/gltrackball.h +sphereeversion.o: ../images/gen/earth_night_png.h +sphereeversion.o: ../images/gen/earth_png.h +sphereeversion.o: ../images/gen/earth_water_png.h sphereeversion.o: $(HACK_SRC)/recanim.h sphereeversion.o: $(HACK_SRC)/screenhackI.h +sphereeversion.o: $(srcdir)/sphereeversion.h sphereeversion.o: $(UTILS_SRC)/colors.h sphereeversion.o: $(UTILS_SRC)/erase.h sphereeversion.o: $(UTILS_SRC)/font-retry.h sphereeversion.o: $(UTILS_SRC)/grabscreen.h sphereeversion.o: $(UTILS_SRC)/hsv.h -sphereeversion.o: $(UTILS_SRC)/pow2.h sphereeversion.o: $(UTILS_SRC)/resources.h sphereeversion.o: $(UTILS_SRC)/usleep.h sphereeversion.o: $(UTILS_SRC)/visual.h sphereeversion.o: $(UTILS_SRC)/xft.h sphereeversion.o: $(UTILS_SRC)/yarandom.h +sphereeversion.o: $(HACK_SRC)/ximage-loader.h sphereeversion.o: $(HACK_SRC)/xlockmoreI.h sphereeversion.o: $(HACK_SRC)/xlockmore.h spheremonics.o: ../../config.h @@ -4101,6 +4221,25 @@ sproingiewrap.o: $(UTILS_SRC)/xft.h sproingiewrap.o: $(UTILS_SRC)/yarandom.h sproingiewrap.o: $(HACK_SRC)/xlockmoreI.h sproingiewrap.o: $(HACK_SRC)/xlockmore.h +squirtorus.o: ../../config.h +squirtorus.o: $(HACK_SRC)/fps.h +squirtorus.o: $(srcdir)/gltrackball.h +squirtorus.o: $(srcdir)/normals.h +squirtorus.o: $(HACK_SRC)/recanim.h +squirtorus.o: $(HACK_SRC)/screenhackI.h +squirtorus.o: $(UTILS_SRC)/colors.h +squirtorus.o: $(UTILS_SRC)/erase.h +squirtorus.o: $(UTILS_SRC)/font-retry.h +squirtorus.o: $(UTILS_SRC)/grabscreen.h +squirtorus.o: $(UTILS_SRC)/hsv.h +squirtorus.o: $(UTILS_SRC)/resources.h +squirtorus.o: $(UTILS_SRC)/spline.h +squirtorus.o: $(UTILS_SRC)/usleep.h +squirtorus.o: $(UTILS_SRC)/visual.h +squirtorus.o: $(UTILS_SRC)/xft.h +squirtorus.o: $(UTILS_SRC)/yarandom.h +squirtorus.o: $(HACK_SRC)/xlockmoreI.h +squirtorus.o: $(HACK_SRC)/xlockmore.h stairs.o: ../../config.h stairs.o: $(HACK_SRC)/fps.h stairs.o: $(srcdir)/gltrackball.h @@ -4327,6 +4466,22 @@ timetunnel.o: $(UTILS_SRC)/yarandom.h timetunnel.o: $(HACK_SRC)/ximage-loader.h timetunnel.o: $(HACK_SRC)/xlockmoreI.h timetunnel.o: $(HACK_SRC)/xlockmore.h +timezones.o: ../../config.h +timezones.o: $(HACK_SRC)/fps.h +timezones.o: $(srcdir)/gllist.h +timezones.o: $(HACK_SRC)/recanim.h +timezones.o: $(HACK_SRC)/screenhackI.h +timezones.o: $(UTILS_SRC)/colors.h +timezones.o: $(UTILS_SRC)/erase.h +timezones.o: $(UTILS_SRC)/font-retry.h +timezones.o: $(UTILS_SRC)/grabscreen.h +timezones.o: $(UTILS_SRC)/hsv.h +timezones.o: $(UTILS_SRC)/resources.h +timezones.o: $(UTILS_SRC)/usleep.h +timezones.o: $(UTILS_SRC)/visual.h +timezones.o: $(UTILS_SRC)/xft.h +timezones.o: $(UTILS_SRC)/yarandom.h +timezones.o: $(HACK_SRC)/xlockmoreI.h toast2.o: ../../config.h toast2.o: $(HACK_SRC)/fps.h toast2.o: $(srcdir)/gllist.h diff --git a/hacks/glx/dxf2gl.pl b/hacks/glx/dxf2gl.pl index 65b5a806..93489529 100755 --- a/hacks/glx/dxf2gl.pl +++ b/hacks/glx/dxf2gl.pl @@ -1,5 +1,5 @@ #!/usr/bin/perl -w -# Copyright © 2003-2018 Jamie Zawinski +# Copyright © 2003-2022 Jamie Zawinski # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that @@ -39,7 +39,7 @@ use Math::Trig qw(acos); use Text::Wrap; my $progname = $0; $progname =~ s@.*/@@g; -my ($version) = ('$Revision: 1.13 $' =~ m/\s(\d[.\d]+)\s/s); +my ($version) = ('$Revision: 1.14 $' =~ m/\s(\d[.\d]+)\s/s); my $verbose = 0; @@ -402,10 +402,13 @@ sub parse_dxf($$$$$) { my $maxz = -999999999; my $i = 0; - foreach my $layer (keys %triangles) { + foreach my $layer ($wireframe_p + ? keys %lines + : keys %triangles) { my %dups; - my @triangles = @{$triangles{$layer}}; - + my @triangles = ($wireframe_p + ? @{$lines{$layer}} + : @{$triangles{$layer}}); foreach my $n (@{$lines{$layer}}, @{$triangles{$layer}}) { if ($i == 0) { $minx = $n if ($n < $minx); $maxx = $n if ($n > $maxx); } diff --git a/hacks/glx/dymaxionmap.c b/hacks/glx/dymaxionmap.c index 1527daa6..64eab59d 100644 --- a/hacks/glx/dymaxionmap.c +++ b/hacks/glx/dymaxionmap.c @@ -1,5 +1,5 @@ /* dymaxionmap --- Buckminster Fuller's unwrapped icosahedral globe. - * Copyright (c) 2016-2018 Jamie Zawinski. + * Copyright © 2016-2022 Jamie Zawinski. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, @@ -50,6 +50,16 @@ #undef RANDSIGN #define RANDSIGN() ((random() & 1) ? 1 : -1) +#undef BUILD_CACHE_PNG + +#ifdef BUILD_CACHE_PNG +# ifdef HAVE_LIBPNG +# include +# else +# error BUILD_CACHE_PNG requires HAVE_LIBPNG +# endif +#endif /* BUILD_CACHE_PNG */ + static int do_roll; static int do_wander; static int do_texture; @@ -301,6 +311,30 @@ create_daylight_mask (Display *dpy, Visual *v, int w, int h) } +/* Reduce the XImage size by half. + */ +static XImage * +shrink_image (Display *dpy, Visual *visual, XImage *image) +{ + int x, y; + int w = image->width; + int h = image->height; + XImage *out = XCreateImage (dpy, visual, image->depth, ZPixmap, 0, 0, + w/2, h/2, 32, 0); + out->data = (char *) calloc (out->height, out->bytes_per_line); + + /* We could do some blending or dithering here, but at these scales, and + with texture scaling happening anyway, I'm not sure we'd be able to + tell the difference. + */ + for (y = 0; y < h; y++) + for (x = 0; x < w; x++) + XPutPixel (out, x >> 1, y >> 1, XGetPixel (image, x, y)); + XDestroyImage (image); + return out; +} + + static void load_images (ModeInfo *mi) { @@ -325,17 +359,28 @@ load_images (ModeInfo *mi) { char *s = (i == 0 ? which_image : which_image2); XImage *image; + Bool builtin_p = False; + if (!strcmp (s, "BUILTIN_DAY")) - image = image_data_to_ximage (MI_DISPLAY (mi), MI_VISUAL (mi), - earth_png, sizeof(earth_png)); + { + image = image_data_to_ximage (MI_DISPLAY (mi), MI_VISUAL (mi), + earth_png, sizeof(earth_png)); + builtin_p = True; + } else if (!strcmp (s, "BUILTIN_NIGHT")) - image = image_data_to_ximage (MI_DISPLAY (mi), MI_VISUAL (mi), - earth_night_png,sizeof(earth_night_png)); + { + image = image_data_to_ximage (MI_DISPLAY (mi), MI_VISUAL (mi), + earth_night_png, sizeof(earth_night_png)); + builtin_p = True; + } else if (!strcmp (s, "BUILTIN") || !strcmp (s, "BUILTIN_FLAT") || (i == 0 && !strcmp (s, ""))) - image = image_data_to_ximage (MI_DISPLAY (mi), MI_VISUAL (mi), - earth_flat_png, sizeof(earth_flat_png)); + { + image = image_data_to_ximage (MI_DISPLAY (mi), MI_VISUAL (mi), + earth_flat_png, sizeof(earth_flat_png)); + builtin_p = True; + } else if (!strcmp (s, "NONE")) image = 0; else if (*s) @@ -345,6 +390,11 @@ load_images (ModeInfo *mi) /* if (image) fprintf (stderr, "%s: %d: loaded %s\n", progname, i, s); */ + /* The 2038x1024 images kill performance. Turn this off in a few + years when Moore's Law has caught up again. */ + while (builtin_p && image->width >= 2048) + image = shrink_image (MI_DISPLAY (mi), MI_VISUAL (mi), image); + if (i == 0) gp->day = image; else @@ -410,6 +460,11 @@ load_images (ModeInfo *mi) by half pixel to make sure we hit every pixel in 'out'. It would be cleaner to iterate over 'out' instead of over 'in' but dymaxionmap-coords.c only goes forward. This is... not super fast. + + If the source image is 2048x1024, it takes ~7 seconds to compute this + 4096x2034 'cvt' map on a 3.2 GHz iMac Pro. I tried pre-computing it + and saving it as a PNG, but that PNG was an unreasonable 1.4 MB! + It's pretty cool looking, though: https://jwz.org/b/yjwx */ { double W = 5.5; @@ -444,13 +499,70 @@ load_images (ModeInfo *mi) } } +# ifdef BUILD_CACHE_PNG + { + png_structp png_ptr; + png_infop info_ptr; + png_bytep row; + char *pngfile = "dymaxionmap_coords.png"; + FILE *f = fopen (pngfile, "wb"); + XImage *img = gp->cvt; + int x, y; + if (! f) + { + fprintf (stderr, "%s: unable to write %s\n", progname, pngfile); + exit (1); + } + + png_ptr = png_create_write_struct (PNG_LIBPNG_VER_STRING, 0, 0, 0); + if (!png_ptr) abort(); + info_ptr = png_create_info_struct (png_ptr); + if (!info_ptr) abort(); + if (setjmp (png_jmpbuf (png_ptr))) abort(); + + png_init_io (png_ptr, f); + + png_set_IHDR (png_ptr, info_ptr, img->width, img->height, 8, + PNG_COLOR_TYPE_RGBA, PNG_INTERLACE_NONE, + PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); + png_write_info (png_ptr, info_ptr); + + row = (png_bytep) malloc (4 * img->width * sizeof(png_byte)); + if (!row) abort(); + for (y = 0 ; y < img->height ; y++) { + for (x = 0 ; x < img->width ; x++) { + unsigned long p = XGetPixel (img, x, y); + row[x*4+3] = (p & 0xFF000000L) >> 24; + row[x*4+2] = (p & 0x00FF0000L) >> 16; + row[x*4+1] = (p & 0x0000FF00L) >> 8; + row[x*4+0] = (p & 0x000000FFL); + } + png_write_row (png_ptr, row); + } + + png_write_end (png_ptr, 0); + + png_free_data (png_ptr, info_ptr, PNG_FREE_ALL, -1); + png_destroy_write_struct (&png_ptr, 0); + free (row); + + fclose (f); + fprintf (stderr, "%s: wrote %s\n", progname, pngfile); + exit (0); + } +# endif /* BUILD_CACHE_PNG */ + /* A 128 GB iPhone 6s dies at around 540 frames, ~1 GB of XImages. A 16 GB iPad Air 2 dies at around 320 frames, ~640 MB. Caching on mobile doesn't matter much: we can just run at 100% CPU. On some systems it would be more efficient to cache the images inside a texture on the GPU instead of moving it from RAM to GPU every few - frames; but on other systems, we'd just run out of GPU memory instead. */ + frames; but on other systems, we'd just run out of GPU memory instead. + + The cache is all-or-nothing: caching every frame is useful, but + caching a subset is not. If we have only cached, say, midnight to + 1am, then that hour will move more quickly than the others. */ { unsigned long cache_size = (gp->day->width * gp->day->height * 4 * gp->nimages); @@ -508,13 +620,14 @@ cache_current_frame (ModeInfo *mi) uint32_t n = *night++; uint32_t x = i % w; uint32_t y = i / w; + /* This is W*H*8 float ops; can we do this with integer math? */ double r = dusk[y * w + ((x + xoff) % w)] / 256.0; double r2 = 1-r; # define ADD(M) (((unsigned long) \ ((((d >> M) & 0xFF) * r) + \ (((n >> M) & 0xFF) * r2))) \ << M) - /* #### Why is this ABGR instead of RGBA? */ + /* Why is this ABGR instead of RGBA? */ *out++ = (0xFF << 24) | ADD(16) | ADD(8) | ADD(0); # undef ADD } @@ -539,7 +652,7 @@ cache_current_frame (ModeInfo *mi) unsigned long p = day[(y>>1) * w + (x>>1)]; unsigned long p2 = out[dy * w + dx]; if (p2 & 0xFF000000) - /* RGBA nonzero alpha: initialized. Average with existing, + /* AGBR nonzero alpha: initialized. Average with existing, otherwise the grid lines look terrible. */ p = (((((p>>24) & 0xFF) + ((p2>>24) & 0xFF)) >> 1) << 24 | ((((p>>16) & 0xFF) + ((p2>>16) & 0xFF)) >> 1) << 16 | diff --git a/hacks/glx/glplanet.c b/hacks/glx/glplanet.c index 2cbe9d58..7c42a5d6 100644 --- a/hacks/glx/glplanet.c +++ b/hacks/glx/glplanet.c @@ -15,21 +15,19 @@ * * Revision History: * - * 10-Nov-14: jwz@jwz.org Night map. Better stars. - * 16-Jan-02: jwz@jwz.org gdk_pixbuf support. - * 21-Mar-01: jwz@jwz.org Broke sphere routine out into its own file. - * - * 9-Oct-98: dek@cgl.ucsf.edu Added stars. - * - * 8-Oct-98: jwz@jwz.org Made the 512x512x1 xearth image be built in. - * Made it possible to load XPM or XBM files. - * Made the planet bounce and roll around. - * - * 8-Oct-98: Released initial version of "glplanet" - * (David Konerding, dek@cgl.ucsf.edu) + * 26-Feb-2022 jwz@jwz.org Display timezones. + * 04-Feb-2019 jwz@jwz.org Mercator and Equirectangular modes. + * 17-Apr-2018 jwz@jwz.org Blended terminator on day/night images. + * 10-Nov-2014 jwz@jwz.org Day and night images. Better stars. + * 16-Jan-2002 jwz@jwz.org gdk_pixbuf support. + * 21-Mar-2001 jwz@jwz.org Broke sphere routine out into its own file. + * 09-Oct-1998 dek@cgl.ucsf.edu Added stars. + * 08-Oct-1998 jwz@jwz.org Made the 512x512x1 xearth image be built in. + * Made it possible to load XPM or XBM files. + * Made the planet bounce and roll around. + * 08-Oct-1998 dek@cgl.ucsf.edu Created. */ - #ifdef STANDALONE #define DEFAULTS "*delay: 20000 \n" \ "*showFPS: False \n" \ @@ -57,7 +55,7 @@ #define DEF_RESOLUTION "128" #define DEF_IMAGE "BUILTIN" #define DEF_IMAGE2 "BUILTIN" -#define DEF_MODE "globe" +#define DEF_MODE "RANDOM" #define BLENDED_TERMINATOR @@ -123,7 +121,9 @@ ModStruct planet_description = #include "ximage-loader.h" #include "rotator.h" #include "gltrackball.h" +#include "gllist.h" +extern const struct gllist *timezones; /*- * slices and stacks are used in the sphere parameterization routine. @@ -136,8 +136,10 @@ typedef struct { GLuint platelist; GLuint shadowlist; GLuint latlonglist; + GLuint tzlist; GLuint starlist; int starcount; + int tzpoints; int screen_width, screen_height; GLXContext *glx_context; Window window; @@ -148,7 +150,9 @@ typedef struct { Bool button_down_p; GLuint tex1, tex2; int draw_axis; + Bool timezones_p; enum { GLOBE, EQUIRECTANGULAR, MERCATOR } mode; + Bool random_p; } planetstruct; @@ -269,9 +273,9 @@ unit_mercator (int stacks, int slices, int wire_p, Bool mercp) GLfloat x, y, ty, xs, ys; GLfloat lastx = 0, lasty = 0, lastty = 0; GLfloat r, north, south; + GLfloat eqoff = 0; - /* #### TODO: the grid lines are always rendered as Equirectangular, - not Mercator. */ + if (wire_p && mercp) stacks += 4; stacks /= 2; xs = 1.0 / slices; @@ -294,18 +298,22 @@ unit_mercator (int stacks, int slices, int wire_p, Bool mercp) } else { - /* Antarctica should be roughly the same width as North America, - but even Equirectangular is crazypants here. */ - north = 80 / 180.0; + /* Empirically, this puts the parallels in the right place. */ + north = 73.5 / 180.0; south = -north; } + if (wire_p && mercp) + eqoff = (south + (north - south) / 2); /* equator offset */ for (j = 0, y = -0.5, ty = 0; j <= stacks; lasty = y, lastty = ty, y += ys, j++) { GLfloat th; + if (j == 1) y += eqoff; /* don't adjust end caps for equator */ + else if (j == stacks) y -= eqoff; + ty = (0.5 - y) * (south - north) - south; ty += 0.5; @@ -319,19 +327,44 @@ unit_mercator (int stacks, int slices, int wire_p, Bool mercp) ty += 0.5; } + /* Draw one ring of quads. + */ + if (j > 0) + { + if (!wire_p) glBegin (GL_QUADS); + for (i = 0, x = 0, lastx = 0; i <= slices; lastx = x, x += xs, i++) + { + GLfloat xx = r * cos(M_PI * 2 * x); + GLfloat yy = r * sin(M_PI * 2 * x); + GLfloat lx = r * cos(M_PI * 2 * lastx); + GLfloat ly = r * sin(M_PI * 2 * lastx); + GLfloat y2 = y; + GLfloat ly2 = lasty; + + if (i == 0) continue; + if (wire_p) glBegin(GL_LINE_LOOP); + glNormal3f (lx, 0, ly); + glTexCoord2f (lastx, lastty); glVertex3f (lx, ly2, ly); + glNormal3f (xx, 0, yy); + glTexCoord2f (x, lastty); glVertex3f (xx, ly2, yy); + glNormal3f (xx, 0, yy); + glTexCoord2f (x, ty); glVertex3f (xx, y2, yy); + glNormal3f (lx, 0, ly); + glTexCoord2f (lastx, ty); glVertex3f (lx, y2, ly); + if (wire_p) glEnd(); + } + if (!wire_p) glEnd(); + } + /* Draw the end caps */ if (j == 0 || j == stacks) { GLfloat xx, yy, lxx, lyy; - glFrontFace(j == 0 ? GL_CCW : GL_CW); - - if (j == stacks && !wire_p) glEnd(); glNormal3f (0, (j == 0 ? -1 : 1), 0); - + glFrontFace(j == 0 ? GL_CCW : GL_CW); glBegin (wire_p ? GL_LINE_LOOP : GL_TRIANGLES); - for (i = 0, x = 0, lastx = 0, lxx = 0; i <= slices; lastx = x, lxx = xx, lyy = yy, x += xs, i++) @@ -346,49 +379,11 @@ unit_mercator (int stacks, int slices, int wire_p, Bool mercp) glTexCoord2f (x, ty); glVertex3f (xx, y, yy); } glEnd(); - glFrontFace(GL_CW); - - if (!wire_p) glBegin (GL_QUADS); - } - - if (j == 0) - continue; - - /* Draw one ring of quads. - */ - for (i = 0, x = 0, lastx = 0; i <= slices; lastx = x, x += xs, i++) - { - GLfloat xx = r * cos(M_PI * 2 * x); - GLfloat yy = r * sin(M_PI * 2 * x); - GLfloat lx = r * cos(M_PI * 2 * lastx); - GLfloat ly = r * sin(M_PI * 2 * lastx); - GLfloat y2 = y; - GLfloat ly2 = lasty; - -#if 0 - if (mercp) - { - y2 = ty - 0.5; - ly2 = lastty - 0.5; - } -#endif - - if (i == 0) continue; - if (wire_p) glBegin(GL_LINE_LOOP); - glNormal3f (lx, 0, ly); - glTexCoord2f (lastx, lastty); glVertex3f (lx, ly2, ly); - glNormal3f (xx, 0, yy); - glTexCoord2f (x, lastty); glVertex3f (xx, ly2, yy); - glNormal3f (xx, 0, yy); - glTexCoord2f (x, ty); glVertex3f (xx, y2, yy); - glNormal3f (lx, 0, ly); - glTexCoord2f (lastx, ty); glVertex3f (lx, y2, ly); - if (wire_p) glEnd(); + if (j == 0) + glFrontFace (GL_CW); } } - if (!wire_p) glEnd(); - glPopMatrix(); } @@ -537,13 +532,15 @@ reshape_planet (ModeInfo *mi, int width, int height) glLoadIdentity(); glTranslatef(0.0, 0.0, -40); -# ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ { +# ifdef HAVE_MOBILE /* Keep it the same relative size when rotated. */ int o = (int) current_device_rotation(); +# else + int o = (width > height ? 0 : 90); +# endif if (o != 0 && o != 180 && o != -180) glScalef (h, h, h); } -# endif glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } @@ -579,11 +576,23 @@ init_planet (ModeInfo * mi) reshape_planet(mi, MI_WIDTH(mi), MI_HEIGHT(mi)); } - if (!mode_arg || !*mode_arg || !strcasecmp(mode_arg, "GLOBE")) + if (!mode_arg || !*mode_arg || !strcasecmp(mode_arg, "random")) + { + if (random() % 6) + gp->mode = GLOBE; + else + gp->mode = MERCATOR, gp->random_p = True; + } + else if (!strcasecmp(mode_arg, "globe")) gp->mode = GLOBE; - else if (!strcasecmp(mode_arg, "EQUIRECTANGULAR")) + else if (!strcasecmp(mode_arg, "equirectangular") || + !strcasecmp(mode_arg, "rectangular") || + !strcasecmp(mode_arg, "rect") || + !strcasecmp(mode_arg, "equi") || + !strcasecmp(mode_arg, "eq")) gp->mode = EQUIRECTANGULAR; - else if (!strcasecmp(mode_arg, "mercator")) + else if (!strcasecmp(mode_arg, "mercator") || + !strcasecmp(mode_arg, "merc")) gp->mode = MERCATOR; else { @@ -617,7 +626,7 @@ init_planet (ModeInfo * mi) gp->rot = make_rotator (do_roll ? spin_speed : 0, do_roll ? spin_speed : 0, 0, 1, - do_wander ? wander_speed : 0, + (do_wander && !gp->random_p) ? wander_speed : 0, True); gp->z = frand (1.0); gp->tilt = frand (23.4); @@ -719,6 +728,72 @@ init_planet (ModeInfo * mi) glEnd(); glPopMatrix (); glEndList(); + + /* Construct the line segments of the timezone lines. The list of line + segments is in a flat equirectangular map, so we need to project that + onto a sphere, and interpolate additional segments within each line to + make it curve. It would be possible to also project these to a cone for + the Mercator and Equirectangular modes, but I haven't bothered. + */ + gp->tzpoints = 0; + gp->tzlist = glGenLists(1); + glNewList (gp->tzlist, GL_COMPILE); + glPushMatrix (); + glRotatef (90, 1, 0, 0); + glRotatef (180, 0, 0, 1); + glRotatef (180, 0, 1, 0); /* line up the time zones */ + { + GLfloat minx = 99999, miny = 99999, maxx = -99999, maxy = -99999; + const GLfloat *p = (GLfloat *) timezones->data; + int lines = timezones->points / 2; + GLfloat min_seg = 0.05; + int i; + if (timezones->primitive != GL_LINES) abort(); + if (timezones->format != GL_V3F) abort(); + + /* Find the bounding box. */ + for (i = 0; i < timezones->points; i++) + { + GLfloat x = p[i * 3]; + GLfloat y = p[i * 3 + 1]; + if (x < minx) minx = x; + if (x > maxx) maxx = x; + if (y < miny) miny = y; + if (y > maxy) maxy = y; + } + + for (i = 0; i < lines; i++) + { + GLfloat x0 = minx + p[0] / (maxx-minx); + GLfloat y0 = miny + p[1] / (maxy-miny); + GLfloat x1 = minx + p[3] / (maxx-minx); + GLfloat y1 = miny + p[4] / (maxy-miny); + + GLfloat d = sqrt ((x1-x0)*(x1-x0) + (y1-y0)*(y1-y0)); + int steps = d / min_seg; + int i; + if (steps == 0) steps = 1; + + glBegin (GL_LINE_STRIP); + for (i = 0; i <= steps; i++) + { + GLfloat r = i / (GLfloat) steps; + GLfloat x2 = x0 + r * (x1 - x0); + GLfloat y2 = y0 + r * (y1 - y0); + GLfloat th1 = y2 * M_PI - M_PI_2; /* longitude radians */ + GLfloat th2 = -x2 * M_PI * 2; /* latitude radians */ + GLfloat x3 = cos(th1) * cos(th2); + GLfloat y3 = sin(th1); + GLfloat z3 = cos(th1) * sin(th2); + glVertex3f (x3, y3, z3); + gp->tzpoints++; + } + glEnd(); + p += 6; + } + } + glPopMatrix (); + glEndList(); } @@ -742,9 +817,16 @@ draw_planet (ModeInfo * mi) mi->polygon_count = 0; if (gp->button_down_p) - gp->draw_axis = 60; + { + if (! gp->draw_axis) + gp->timezones_p = (gp->mode == GLOBE && !(random() % 2)); + gp->draw_axis = 60; + } else if (!gp->draw_axis && !(random() % 1000)) - gp->draw_axis = 60 + (random() % 90); + { + gp->draw_axis = 60 + (random() % 90); + gp->timezones_p = (gp->mode == GLOBE && !(random() % 10)); + } if (do_rotate && !gp->button_down_p) { @@ -958,7 +1040,7 @@ draw_planet (ModeInfo * mi) glDisable (GL_BLEND); } - if (gp->draw_axis) + if (gp->draw_axis && !gp->timezones_p) { glPushMatrix(); glRotatef (gp->z * 360, 0.0, 0.0, 1.0); @@ -974,6 +1056,23 @@ draw_planet (ModeInfo * mi) glEnable (GL_LIGHTING); if (gp->draw_axis) gp->draw_axis--; } + else if (gp->draw_axis && gp->timezones_p) + { + glPushMatrix(); + glRotatef (gp->z * 360, 0.0, 0.0, 1.0); + glScalef (1.02, 1.02, 1.02); + glDisable (GL_TEXTURE_2D); + glDisable (GL_LIGHTING); + glDisable (GL_LINE_SMOOTH); + glColor3f (0.1, 0.3, 0.1); + glCallList (gp->tzlist); + mi->polygon_count += gp->tzpoints; + glPopMatrix(); + if (!wire && !do_texture) + glEnable (GL_LIGHTING); + if (gp->draw_axis) gp->draw_axis--; + } + glPopMatrix(); if (mi->fps_p) do_fps (mi); @@ -993,6 +1092,7 @@ free_planet (ModeInfo * mi) if (glIsList(gp->platelist)) glDeleteLists(gp->platelist, 1); if (glIsList(gp->shadowlist)) glDeleteLists(gp->shadowlist, 1); if (glIsList(gp->latlonglist)) glDeleteLists(gp->latlonglist, 1); + if (glIsList(gp->tzlist)) glDeleteLists(gp->tzlist, 1); if (glIsList(gp->starlist)) glDeleteLists(gp->starlist, 1); glDeleteTextures(1, &gp->tex1); glDeleteTextures(1, &gp->tex2); diff --git a/hacks/glx/glsl-utils.c b/hacks/glx/glsl-utils.c index e4d5d31a..c5b851f2 100644 --- a/hacks/glx/glsl-utils.c +++ b/hacks/glx/glsl-utils.c @@ -75,7 +75,7 @@ void glsl_Rotate(GLfloat c[16], GLfloat angle, GLfloat x, GLfloat y, GLfloat z) n[0] = x/l; n[1] = y/l; n[2] = z/l; - t = angle*180.0f/M_PI; + t = angle*M_PI/180.0f; ct = cosf(t); st = sinf(t); omct = 1.0f-ct; diff --git a/hacks/glx/glslideshow.c b/hacks/glx/glslideshow.c index 88055e34..15d2ec35 100644 --- a/hacks/glx/glslideshow.c +++ b/hacks/glx/glslideshow.c @@ -1,4 +1,4 @@ -/* glslideshow, Copyright (c) 2003-2020 Jamie Zawinski +/* glslideshow, Copyright © 2003-2022 Jamie Zawinski * Loads a sequence of images and smoothly pans around them; crossfades * when loading new images. * @@ -72,11 +72,16 @@ # define DEF_TITLES "False" # define DEF_LETTERBOX "True" # define DEF_DEBUG "False" +# define DEF_VERBOSE "False" # define DEF_MIPMAP "True" #include "grab-ximage.h" #include "texfont.h" +# ifndef HAVE_JWXYZ +# include /* for XrmDatabase in -verbose mode */ +# endif + typedef struct { double x, y, w, h; } rect; @@ -93,7 +98,8 @@ typedef struct { on screen */ GLuint texid; /* which texture contains the image */ int refcount; /* how many sprites refer to this image */ - texture_loader_t *loader; /* asynchronous image loader */ + texture_loader_t *loader; /* asynchronous image loader */ + int steps; /* How many steps it took to load */ } image; @@ -167,7 +173,8 @@ static Bool letterbox_p; /* When a loaded image is not the same aspect */ static Bool mipmap_p; /* Use mipmaps instead of single textures. */ static Bool do_titles; /* Display image titles. */ -static Bool debug_p; /* Be loud and do weird things. */ +static Bool verbose_p; /* Print to stderr. */ +static Bool debug_p; /* Show image extents with boxes. */ static XrmOptionDescRec opts[] = { @@ -182,6 +189,8 @@ static XrmOptionDescRec opts[] = { {"-clip", ".letterbox", XrmoptionNoArg, "False" }, {"-mipmaps", ".mipmap", XrmoptionNoArg, "True" }, {"-no-mipmaps", ".mipmap", XrmoptionNoArg, "False" }, + {"-v", ".verbose", XrmoptionNoArg, "True" }, + {"-verbose", ".verbose", XrmoptionNoArg, "True" }, {"-debug", ".debug", XrmoptionNoArg, "True" }, }; @@ -193,6 +202,7 @@ static argtype vars[] = { { &mipmap_p, "mipmap", "Mipmap", DEF_MIPMAP, t_Bool}, { &letterbox_p, "letterbox", "Letterbox", DEF_LETTERBOX, t_Bool}, { &fps_cutoff, "FPScutoff", "FPSCutoff", DEF_FPS_CUTOFF, t_Int}, + { &verbose_p, "verbose", "Verbose", DEF_VERBOSE, t_Bool}, { &debug_p, "debug", "Debug", DEF_DEBUG, t_Bool}, { &do_titles, "titles", "Titles", DEF_TITLES, t_Bool}, }; @@ -294,6 +304,7 @@ alloc_image_incremental (ModeInfo *mi) img->loaded_p = False; img->used_p = False; img->mi = mi; + img->steps = 0; glGenTextures (1, &img->texid); if (img->texid <= 0) abort(); @@ -390,9 +401,10 @@ image_loaded_cb (const char *filename, XRectangle *geom, if (s) strcpy (img->title, s+1); } - if (debug_p) - fprintf (stderr, "%s: loaded img %2d: \"%s\"\n", - blurb(), img->id, (img->title ? img->title : "(null)")); + if (verbose_p) + fprintf (stderr, "%s: loaded img %2d: \"%s\" (%d steps)\n", + blurb(), img->id, (img->title ? img->title : "(null)"), + img->steps + 1); DONE: img->loaded_p = True; @@ -429,7 +441,7 @@ destroy_image (ModeInfo *mi, image *img) if (!freed_p) abort(); - if (debug_p) + if (verbose_p) fprintf (stderr, "%s: unloaded img %2d: \"%s\"\n", blurb(), img->id, (img->title ? img->title : "(null)")); @@ -709,9 +721,9 @@ tick_sprite (ModeInfo *mi, sprite *sp) { double secs = now - sp->state_time; - if (debug_p) + if (verbose_p) fprintf (stderr, - "%s: %s %3d frames %2.0f sec %5.1f fps (%.1f fps?)\n", + "%s: %s %3d frames %2.0f sec %5.1f fps (max %.1f fps?)\n", blurb(), (sp->prev_state == IN ? "fade" : "pan "), sp->frame_count, @@ -739,7 +751,7 @@ tick_sprite (ModeInfo *mi, sprite *sp) its creation time compared to the current wall clock. */ static void -draw_sprite (ModeInfo *mi, sprite *sp) +draw_sprite (ModeInfo *mi, sprite *sp, Bool keep_title_p) { slideshow_state *ss = &sss[MI_SCREEN(mi)]; int wire = MI_IS_WIREFRAME(mi); @@ -795,6 +807,7 @@ draw_sprite (ModeInfo *mi, sprite *sp) GLfloat texx2 = texx1 + texw; GLfloat texy2 = texy1 + texh; + glEnable (GL_TEXTURE_2D); glBindTexture (GL_TEXTURE_2D, img->texid); glColor4f (1, 1, 1, sp->opacity); glNormal3f (0, 0, 1); @@ -826,11 +839,9 @@ draw_sprite (ModeInfo *mi, sprite *sp) } - if (do_titles && - img->title && *img->title && - (sp->state == IN || sp->state == FULL)) + if (do_titles && img->title && *img->title) { - glColor4f (1, 1, 1, sp->opacity); + glColor4f (1, 1, 1, keep_title_p ? 1 : sp->opacity); print_texture_label (mi->dpy, ss->font_data, mi->xgwa.width, mi->xgwa.height, 1, img->title); @@ -882,6 +893,7 @@ static void draw_sprites (ModeInfo *mi) { slideshow_state *ss = &sss[MI_SCREEN(mi)]; + char *last_title = 0; int i; glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -904,7 +916,16 @@ draw_sprites (ModeInfo *mi) */ for (i = 0; i < ss->nsprites; i++) - draw_sprite (mi, ss->sprites[i]); + { + sprite *s = ss->sprites[i]; + /* If the two sprites have the same title, draw the second title at + full intensity to avoid a weird blooming effect when crossfading + an image with itself. */ + Bool keep_title_p = (do_titles && last_title && s->img->title && + !strcmp (last_title, s->img->title)); + draw_sprite (mi, s, keep_title_p); + last_title = s->img->title; + } glPopMatrix(); if (debug_p) /* draw a white box (the "screen") */ @@ -961,11 +982,11 @@ slideshow_handle_event (ModeInfo *mi, XEvent *event) slideshow_state *ss = &sss[MI_SCREEN(mi)]; if (event->xany.type == Expose || - event->xany.type == GraphicsExpose || - event->xany.type == VisibilityNotify) + event->xany.type == GraphicsExpose || + event->xany.type == VisibilityNotify) { ss->redisplay_needed_p = True; - if (debug_p) + if (verbose_p) fprintf (stderr, "%s: exposure\n", blurb()); return False; } @@ -1043,7 +1064,7 @@ check_fps (ModeInfo *mi) if (fps >= fps_cutoff) { - if (debug_p) + if (verbose_p) fprintf (stderr, "%s: %.1f fps is fast enough (with %d frames in %.1f secs)\n", blurb(), fps, ss->frames_elapsed, wall_elapsed); @@ -1073,24 +1094,25 @@ check_fps (ModeInfo *mi) } -/* Kludge to add "-v" to invocation of "xscreensaver-getimage" in -debug mode +/* Add "-v" to invocation of "xscreensaver-getimage" in -debug mode. */ static void -hack_resources (void) +hack_resources (Display *dpy) { -#if 0 +# ifndef HAVE_JWXYZ char *res = "desktopGrabber"; - char *val = get_string_resource (res, "DesktopGrabber"); + char *val = get_string_resource (dpy, res, "DesktopGrabber"); char buf1[255]; char buf2[255]; XrmValue value; - sprintf (buf1, "%.100s.%.100s", progclass, res); + XrmDatabase db = XtDatabase (dpy); + sprintf (buf1, "%.100s.%.100s", progname, res); sprintf (buf2, "%.200s -v", val); value.addr = buf2; value.size = strlen(buf2); XrmPutResource (&db, buf1, "String", &value); free (val); -#endif +# endif /* !HAVE_JWXYZ */ } @@ -1110,13 +1132,15 @@ init_slideshow (ModeInfo *mi) MI_CLEARWINDOW(mi); } - if (debug_p) + if (debug_p) verbose_p = True; + + if (verbose_p) fprintf (stderr, "%s: pan: %d; fade: %d; img: %d; zoom: %d%%\n", blurb(), pan_seconds, fade_seconds, image_seconds, zoom); sanity_check(mi); - if (debug_p) + if (verbose_p) fprintf (stderr, "%s: pan: %d; fade: %d; img: %d; zoom: %d%%\n\n", blurb(), pan_seconds, fade_seconds, image_seconds, zoom); @@ -1139,7 +1163,7 @@ init_slideshow (ModeInfo *mi) ss->font_data = load_texture_font (mi->dpy, "titleFont"); if (debug_p) - hack_resources(); + hack_resources (MI_DISPLAY(mi)); ss->now = double_time(); ss->dawn_of_time = ss->now; @@ -1150,8 +1174,7 @@ init_slideshow (ModeInfo *mi) } -static void -slideshow_idle (ModeInfo *mi); +static void slideshow_idle (ModeInfo *mi); ENTRYPOINT void @@ -1235,7 +1258,7 @@ draw_slideshow (ModeInfo *mi) return; } - if (debug_p && ss->now - ss->prev_frame_time > 1) + if (verbose_p && ss->now - ss->prev_frame_time > 1) fprintf (stderr, "%s: static screen for %.1f secs\n", blurb(), ss->now - ss->prev_frame_time); @@ -1286,7 +1309,7 @@ static void slideshow_idle (ModeInfo *mi) { slideshow_state *ss = &sss[MI_SCREEN(mi)]; - double end_by_time = ss->now + ((double) mi->pause) / 2000000; + double allowed_time = ((double) mi->pause) / 2000000; /* 0.01 sec */ int i; for (i = 0; i < ss->nimages; i++) @@ -1296,8 +1319,9 @@ slideshow_idle (ModeInfo *mi) { if (texture_loader_failed (img->loader)) abort(); - step_texture_loader (img->loader, end_by_time - double_time(), + step_texture_loader (img->loader, allowed_time, image_loaded_cb, img); + img->steps++; break; /* only do the first one! */ } } diff --git a/hacks/glx/grab-ximage.c b/hacks/glx/grab-ximage.c index 76753021..f4770d52 100644 --- a/hacks/glx/grab-ximage.c +++ b/hacks/glx/grab-ximage.c @@ -1,5 +1,5 @@ /* grab-ximage.c --- grab the screen to an XImage for use with OpenGL. - * xscreensaver, Copyright (c) 2001-2021 Jamie Zawinski + * xscreensaver, Copyright © 2001-2022 Jamie Zawinski * * Modified by Richard Weeks Copyright (c) 2020 * @@ -462,7 +462,9 @@ typedef struct { } img_closure; -typedef enum { TLP_LOADING = 0, TLP_IMPORTING, TLP_COMPLETE, TLP_ERROR } texture_loader_phase; +typedef enum { TLP_LOADING = 0, TLP_IMPORTING, TLP_COMPLETE, TLP_ERROR } + texture_loader_phase; + struct texture_loader_t { texture_loader_phase phase; Screen *screen; @@ -958,6 +960,8 @@ incremental_load_texture_async_cb (Screen *screen, Window window, loader->img_width = loader->ximage->width; loader->img_height = loader->ximage->height; loader->stripe_height = (1 << 19) / loader->img_width; + if (loader->stripe_height < 1) + loader->stripe_height = 1; if (dd.texid != -1) glBindTexture (GL_TEXTURE_2D, dd.texid); @@ -1012,12 +1016,21 @@ step_texture_loader (texture_loader_t *loader, double allowed_seconds, if (loader->phase != TLP_IMPORTING) return; + if (allowed_seconds < 0.001) + allowed_seconds = 0.001; + if (loader->y < loader->ximage->height) { loader->steps++; if (loader->steps == 1) - /* Initial tune on the loader for the number of allowed_seconds */ - loader->stripe_height = ((unsigned int) (perf * allowed_seconds / loader->ximage->width)) / 8 + 1; + { + /* Initial tune on the loader for the number of allowed_seconds */ + loader->stripe_height = ((unsigned int) + (perf * allowed_seconds / + loader->ximage->width)) / 8 + 1; + if (loader->stripe_height < 1) + loader->stripe_height = 1; + } else advance_texture_loader (loader, allowed_seconds); } diff --git a/hacks/glx/mapcities.h b/hacks/glx/mapcities.h new file mode 100644 index 00000000..ff27f445 --- /dev/null +++ b/hacks/glx/mapcities.h @@ -0,0 +1,896 @@ +/* Cities with population of over a million, and capital cities. + Extracted from https://simplemaps.com/data/world-cities in 2021. + Creative Commons Attribution 4.0 International (CC BY 4.0) + */ + + { 35.6897, 139.6922 }, /* Tokyo, JP 37,977,000 */ + { -6.2146, 106.8451 }, /* Jakarta, ID 34,540,000 */ + { 28.6600, 77.2300 }, /* Delhi, IN 29,617,000 */ + { 18.9667, 72.8333 }, /* Mumbai, IN 23,355,000 */ + { 14.6000, 120.9833 }, /* Manila, PH 23,088,000 */ + { 31.1667, 121.4667 }, /* Shanghai, CN 22,120,000 */ + { -23.5504, -46.6339 }, /* São Paulo, BR 22,046,000 */ + { 37.5600, 126.9900 }, /* Seoul, KR 21,794,000 */ + { 19.4333, -99.1333 }, /* Mexico City, MX 20,996,000 */ + { 23.1288, 113.2590 }, /* Guangzhou, CN 20,902,000 */ + { 39.9050, 116.3914 }, /* Beijing, CN 19,433,000 */ + { 30.0561, 31.2394 }, /* Cairo, EG 19,372,000 */ + { 40.6943, -73.9249 }, /* New York, NY 18,713,220 */ + { 22.5411, 88.3378 }, /* Kolkāta, IN 17,560,000 */ + { 55.7558, 37.6178 }, /* Moscow, RU 17,125,000 */ + { 13.7500, 100.5167 }, /* Bangkok, TH 17,066,000 */ + { -34.5997, -58.3819 }, /* Buenos Aires, AR 16,157,000 */ + { 22.5350, 114.0540 }, /* Shenzhen, CN 15,929,000 */ + { 23.7289, 90.3944 }, /* Dhaka, BD 15,443,000 */ + { 6.4500, 3.4000 }, /* Lagos, NG 15,279,000 */ + { 41.0100, 28.9603 }, /* Istanbul, TR 15,154,000 */ + { 34.7500, 135.4601 }, /* Ōsaka, JP 14,977,000 */ + { 24.8600, 67.0100 }, /* Karachi, PK 14,835,000 */ + { 12.9699, 77.5980 }, /* Bangalore, IN 13,707,000 */ + { 35.7000, 51.4167 }, /* Tehran, IR 13,633,000 */ + { -4.3233, 15.3081 }, /* Kinshasa, CD 13,528,000 */ + { 10.8167, 106.6333 }, /* Ho Chi Minh City, VN 13,312,000 */ + { 34.1139, -118.4068 }, /* Los Angeles, CA 12,750,807 */ + { -22.9083, -43.1964 }, /* Rio de Janeiro, BR 12,272,000 */ + { 32.9987, 112.5292 }, /* Nanyang, CN 12,010,000 */ + { 38.8671, 115.4845 }, /* Baoding, CN 11,860,000 */ + { 13.0825, 80.2750 }, /* Chennai, IN 11,324,000 */ + { 30.6600, 104.0633 }, /* Chengdu, CN 11,309,000 */ + { 31.5497, 74.3436 }, /* Lahore, PK 11,021,000 */ + { 48.8566, 2.3522 }, /* Paris, FR 11,020,000 */ + { 51.5072, -0.1275 }, /* London, GB 10,979,000 */ + { 35.0606, 118.3425 }, /* Linyi, CN 10,820,000 */ + { 39.1467, 117.2056 }, /* Tianjin, CN 10,800,000 */ + { 38.0422, 114.5086 }, /* Shijiazhuang, CN 10,784,600 */ + { 33.6250, 114.6418 }, /* Zhoukou, CN 9,901,000 */ + { -12.0500, -77.0333 }, /* Lima, PE 9,848,000 */ + { 17.3667, 78.4667 }, /* Hyderābād, IN 9,746,000 */ + { 36.6116, 114.4894 }, /* Handan, CN 9,549,700 */ + { 4.6126, -74.0705 }, /* Bogotá, CO 9,464,000 */ + { 36.7167, 119.1000 }, /* Weifang, CN 9,373,000 */ + { 35.1167, 136.9333 }, /* Nagoya, JP 9,113,000 */ + { 30.5872, 114.2881 }, /* Wuhan, CN 8,962,000 */ + { 35.2333, 115.4333 }, /* Heze, CN 8,750,000 */ + { 25.8292, 114.9336 }, /* Ganzhou, CN 8,677,600 */ + { 34.2610, 117.1859 }, /* Tongshan, CN 8,669,000 */ + { 41.8373, -87.6862 }, /* Chicago, IL 8,604,203 */ + { -8.8383, 13.2344 }, /* Luanda, AO 8,417,000 */ + { 28.1987, 112.9709 }, /* Changsha, CN 8,394,500 */ + { 32.8986, 115.8045 }, /* Fuyang, CN 8,360,000 */ + { 3.1478, 101.6953 }, /* Kuala Lumpur, MY 8,285,000 */ + { 35.4000, 116.5667 }, /* Jining, CN 8,023,000 */ + { 23.0475, 113.7493 }, /* Dongguan, CN 7,981,000 */ + { 36.6667, 116.9833 }, /* Jinan, CN 7,967,400 */ + { 23.0292, 113.1056 }, /* Foshan, CN 7,905,700 */ + { 21.0245, 105.8412 }, /* Hanoi, VN 7,785,000 */ + { 18.5196, 73.8553 }, /* Pune, IN 7,764,000 */ + { 29.5628, 106.5528 }, /* Chongqing, CN 7,739,000 */ + { 43.9000, 125.2000 }, /* Changchun, CN 7,674,439 */ + { 32.9773, 114.0253 }, /* Zhumadian, CN 7,640,000 */ + { 29.8750, 121.5492 }, /* Ningbo, CN 7,639,000 */ + { 38.3037, 116.8452 }, /* Cangzhou, CN 7,544,300 */ + { 32.0500, 118.7667 }, /* Nanjing, CN 7,496,000 */ + { 31.8639, 117.2808 }, /* Hefei, CN 7,457,027 */ + { 23.0300, 72.5800 }, /* Ahmedabad, IN 7,410,000 */ + { 22.3050, 114.1850 }, /* Hong Kong, HK 7,347,000 */ + { 21.1967, 110.4031 }, /* Zhanjiang, CN 7,332,000 */ + { 27.2418, 111.4725 }, /* Shaoyang, CN 7,302,400 */ + { 26.8968, 112.5857 }, /* Hengyang, CN 7,300,600 */ + { 31.9829, 120.8873 }, /* Nantong, CN 7,282,835 */ + { 15.6031, 32.5265 }, /* Khartoum, SD 7,282,000 */ + { 33.3936, 120.1339 }, /* Yancheng, CN 7,260,240 */ + { 22.8192, 108.3150 }, /* Nanning, CN 7,153,300 */ + { 34.2667, 108.9000 }, /* Xi’an, CN 7,135,000 */ + { 41.8039, 123.4258 }, /* Shenyang, CN 7,105,000 */ + { 39.6292, 118.1742 }, /* Tangshan, CN 7,100,000 */ + { -33.4500, -70.6667 }, /* Santiago, CL 7,007,000 */ + { 34.7492, 113.6605 }, /* Zhengzhou, CN 7,005,000 */ + { 34.4259, 115.6467 }, /* Shangqiu, CN 7,000,000 */ + { 37.3997, 121.2664 }, /* Yantai, CN 6,968,202 */ + { 24.6500, 46.7100 }, /* Riyadh, SA 6,881,000 */ + { -6.8000, 39.2833 }, /* Dar es Salaam, TZ 6,698,000 */ + { 32.1264, 114.0672 }, /* Xinyang, CN 6,634,000 */ + { 28.4419, 117.9633 }, /* Shangrao, CN 6,579,714 */ + { 34.6587, 112.4245 }, /* Luoyang, CN 6,549,941 */ + { 27.3019, 105.2863 }, /* Bijie, CN 6,537,498 */ + { 24.9139, 118.5858 }, /* Quanzhou, CN 6,480,000 */ + { 30.2500, 120.1675 }, /* Hangzhou, CN 6,446,000 */ + { 25.7839, -80.2102 }, /* Miami, Florida 6,445,545 */ + { 30.4500, 114.8750 }, /* Huanggang, CN 6,333,000 */ + { 21.6618, 110.9178 }, /* Maoming, CN 6,313,200 */ + { 25.0433, 102.7061 }, /* Kunming, CN 6,250,000 */ + { 30.7991, 106.0784 }, /* Nanchong, CN 6,183,000 */ + { 27.7050, 106.9336 }, /* Zunyi, CN 6,127,009 */ + { 31.7542, 116.5078 }, /* Lu’an, CN 6,090,000 */ + { 23.5533, 116.3649 }, /* Jieyang, CN 6,089,400 */ + { 27.8041, 114.3830 }, /* Yichun, CN 6,048,700 */ + { 40.4167, -3.7167 }, /* Madrid, ES 6,026,000 */ + { 29.0397, 111.6839 }, /* Changde, CN 6,011,000 */ + { 28.6583, 121.4221 }, /* Taizhou, CN 5,968,838 */ + { 36.4500, 115.9833 }, /* Liaocheng, CN 5,955,300 */ + { 25.5102, 103.8029 }, /* Qujing, CN 5,855,055 */ + { 21.1700, 72.8300 }, /* SÅ«rat, IN 5,807,000 */ + { 33.3500, 44.4167 }, /* Baghdad, IQ 5,796,000 */ + { 36.1167, 120.4000 }, /* Qingdao, CN 5,775,000 */ + { 1.3000, 103.8000 }, /* Singapore, SG 5,745,000 */ + { 32.7936, -96.7662 }, /* Dallas, TX 5,743,938 */ + { 31.2152, 107.4947 }, /* Dazhou, CN 5,693,000 */ + { 33.6333, 116.9683 }, /* Suzhou, CN 5,690,000 */ + { 32.0654, 112.1531 }, /* Xiangyang, CN 5,680,000 */ + { 40.0077, -75.1339 }, /* Philadelphia, PA 5,649,300 */ + { 29.9870, 31.2118 }, /* Giza, EG 5,598,402 */ + { -1.2864, 36.8172 }, /* Nairobi, KE 5,545,000 */ + { 35.2992, 113.8851 }, /* Nangandao, CN 5,516,000 */ + { 39.9300, 32.8500 }, /* Ankara, TR 5,503,985 */ + { 36.2001, 117.0809 }, /* Tai’an, CN 5,499,000 */ + { 22.6293, 110.1507 }, /* Yulin, CN 5,487,368 */ + { 37.4513, 116.3105 }, /* Dezhou, CN 5,470,000 */ + { 29.7863, -95.3889 }, /* Houston, TX 5,464,251 */ + { 33.7627, -84.4224 }, /* Atlanta, GA 5,449,398 */ + { 26.4515, 111.5953 }, /* Yongzhou, CN 5,446,100 */ + { 16.8000, 96.1500 }, /* Rangoon, MM 5,430,000 */ + { 43.7417, -79.3733 }, /* Toronto, CA 5,429,524 */ + { 46.6384, 126.9808 }, /* Suihua, CN 5,420,000 */ + { 38.9047, -77.0163 }, /* Washington, DC 5,379,184 */ + { 47.3398, 123.9512 }, /* Qiqihar, CN 5,367,003 */ + { 29.1046, 119.6494 }, /* Jinhua, CN 5,361,572 */ + { 59.9500, 30.3167 }, /* Saint Petersburg, RU 5,351,935 */ + { 23.3735, 116.6941 }, /* Shantou, CN 5,319,028 */ + { -33.8650, 151.2094 }, /* Sydney, AU 5,312,163 */ + { 34.4996, 109.4684 }, /* Weinan, CN 5,300,000 */ + { 33.9331, 118.2831 }, /* Suqian, CN 5,290,000 */ + { 20.6767, -103.3475 }, /* Guadalajara, MX 5,253,000 */ + { 31.3040, 120.6164 }, /* Suzhou, CN 5,250,000 */ + { 26.0769, 119.2917 }, /* Fuzhou, CN 5,245,000 */ + { 27.3328, 103.7144 }, /* Zhaotong, CN 5,213,521 */ + { 31.2231, 121.5397 }, /* Pudong, CN 5,187,200 */ + { -19.9281, -43.9419 }, /* Belo Horizonte, BR 5,159,000 */ + { 24.5093, 117.6612 }, /* Zhangzhou, CN 5,140,000 */ + { 33.8626, 115.7742 }, /* Bozhou, CN 5,100,000 */ + { -37.8136, 144.9631 }, /* Melbourne, AU 5,078,193 */ + { 28.6842, 115.8872 }, /* Nanchang, CN 5,042,565 */ + { 34.3500, 108.7167 }, /* Xianyang, CN 5,040,000 */ + { 32.4831, 119.9000 }, /* Taizhou, CN 5,031,000 */ + { 27.5494, 109.9592 }, /* Huaihua, CN 4,983,300 */ + { 5.3364, -4.0267 }, /* Abidjan, CI 4,980,000 */ + { -7.2458, 112.7378 }, /* Surabaya, ID 4,975,000 */ + { 27.1172, 114.9793 }, /* Ji’an, CN 4,956,600 */ + { 31.4669, 104.7385 }, /* Mianyang, CN 4,945,000 */ + { 30.9273, 113.9110 }, /* Xiaoganzhan, CN 4,921,000 */ + { 30.0000, 120.5833 }, /* Shaoxing, CN 4,912,239 */ + { 31.2000, 29.9167 }, /* Alexandria, EG 4,870,000 */ + { 35.0304, 110.9980 }, /* Yuncheng, CN 4,860,000 */ + { 33.7350, 113.2999 }, /* Pingdingshan, CN 4,838,000 */ + { 23.1115, 114.4152 }, /* Huizhou, CN 4,830,000 */ + { 33.5000, 119.1331 }, /* Huai’an, CN 4,799,889 */ + { 34.5906, 119.1801 }, /* Xinpu, CN 4,790,000 */ + { 25.7989, 113.0267 }, /* Chenzhou, CN 4,754,600 */ + { 25.2667, 110.2833 }, /* Guilin, CN 4,747,963 */ + { 29.7048, 116.0021 }, /* Jiujiang, CN 4,728,778 */ + { 30.5000, 117.0333 }, /* Anqing, CN 4,723,000 */ + { 42.3188, -71.0846 }, /* Boston, MA 4,688,346 */ + { 34.7936, 114.3403 }, /* Huanglongsi, CN 4,676,159 */ + { 22.5833, 113.0833 }, /* Jiangmen, CN 4,630,300 */ + { 31.8122, 119.9692 }, /* Changzhou, CN 4,592,431 */ + { 41.3825, 2.1769 }, /* Barcelona, ES 4,588,000 */ + { 31.5667, 120.2833 }, /* Wuxi, CN 4,580,000 */ + { 36.7831, 118.0497 }, /* Zibo, CN 4,530,597 */ + { 30.7522, 120.7500 }, /* Jiaxing, CN 4,501,657 */ + { 38.9000, 121.6000 }, /* Dalian, CN 4,480,000 */ + { 37.7348, 115.6860 }, /* Hengshui, CN 4,472,000 */ + { 32.3912, 119.4363 }, /* Yangzhou, CN 4,459,000 */ + { 45.7500, 126.6333 }, /* Harbin, CN 4,458,000 */ + { 28.7596, 104.6400 }, /* Yibin, CN 4,456,000 */ + { -26.2044, 28.0416 }, /* Johannesburg, ZA 4,434,827 */ + { 28.5833, 112.3333 }, /* Yiyang, CN 4,420,700 */ + { 24.2998, 116.1191 }, /* Meizhou, CN 4,378,800 */ + { 42.2663, 118.9223 }, /* Chifeng, CN 4,376,600 */ + { 33.5992, -7.6200 }, /* Casablanca, MA 4,370,000 */ + { 26.5794, 106.7078 }, /* Guiyang, CN 4,365,000 */ + { 39.5196, 116.7006 }, /* Langfang, CN 4,358,839 */ + { 40.8108, 114.8811 }, /* Zhangjiakou, CN 4,345,491 */ + { 38.4127, 27.1384 }, /* Ä°zmir, TR 4,320,519 */ + { 36.0812, 111.5087 }, /* Linfen, CN 4,316,610 */ + { 27.9991, 120.6561 }, /* Wenzhou, CN 4,310,000 */ + { 25.6667, -100.3000 }, /* Monterrey, MX 4,295,000 */ + { 28.8918, 105.4409 }, /* Luzhou, CN 4,291,000 */ + { 34.0244, 113.8201 }, /* Jiangguanchi, CN 4,289,000 */ + { 29.5872, 105.0635 }, /* Neijiang, CN 4,238,000 */ + { 33.5722, -112.0891 }, /* Phoenix, AZ 4,219,697 */ + { 30.1256, 104.6397 }, /* Yanjiang, CN 4,217,000 */ + { 23.0500, 112.4667 }, /* Zhaoqing, CN 4,151,700 */ + { 30.7083, 111.2803 }, /* Xiaoxita, CN 4,137,900 */ + { 23.0961, 109.6092 }, /* Guigang, CN 4,118,808 */ + { 32.3062, 118.3115 }, /* Chuzhou, CN 4,110,000 */ + { 24.4797, 118.0819 }, /* Xiamen, CN 4,110,000 */ + { 27.9814, 116.3577 }, /* Fuzhou, CN 4,047,200 */ + { 27.8407, 113.1469 }, /* Zhuzhou, CN 4,028,500 */ + { 31.9500, 35.9333 }, /* Amman, JO 4,007,526 */ + { 21.5428, 39.1728 }, /* Jeddah, SA 3,976,000 */ + { 27.7378, 111.9974 }, /* Loudi, CN 3,941,300 */ + { 31.1289, 104.3950 }, /* Deyang, CN 3,877,000 */ + { 23.6842, 113.0507 }, /* Qingyuan, CN 3,874,000 */ + { 31.3340, 118.3622 }, /* Wuhu, CN 3,842,100 */ + { 23.0965, 109.6091 }, /* Hechi, CN 3,830,000 */ + { 47.6211, -122.3244 }, /* Seattle, WA 3,789,215 */ + { 37.3806, 118.0125 }, /* Binzhou, CN 3,779,200 */ + { 24.3264, 109.4281 }, /* Liuzhou, CN 3,758,704 */ + { 35.4333, 139.6333 }, /* Yokohama, JP 3,757,630 */ + { 34.3609, 107.1751 }, /* Baojishi, CN 3,738,700 */ + { 30.4673, 106.6336 }, /* Guang’an, CN 3,723,000 */ + { 33.0794, 107.0260 }, /* Hanzhong, CN 3,700,000 */ + { 34.5328, 69.1658 }, /* Kabul, AF 3,678,034 */ + { 34.8667, 117.5500 }, /* Zaozhuang, CN 3,650,000 */ + { 41.1066, 122.9895 }, /* Anshan, CN 3,645,884 */ + { 52.5167, 13.3833 }, /* Berlin, DE 3,644,826 */ + { 36.0617, 103.8318 }, /* Lanzhou, CN 3,616,163 */ + { 40.9739, 117.9322 }, /* Chengde, CN 3,610,000 */ + { 37.7710, -122.4126 }, /* San Francisco, CA 3,592,294 */ + { 35.7639, 115.0300 }, /* Puyang, CN 3,580,000 */ + { 30.5098, 105.5737 }, /* Suining, CN 3,556,000 */ + { 35.2290, 113.2304 }, /* Jiaozuo, CN 3,540,101 */ + { 32.9354, 117.3531 }, /* Bengbu, CN 3,525,000 */ + { 45.5089, -73.5617 }, /* Montréal, CA 3,519,595 */ + { 42.3834, -83.1024 }, /* Detroit, MI 3,506,126 */ + { 23.9010, 106.6194 }, /* Baicheng, CN 3,466,758 */ + { 35.1000, 129.0403 }, /* Busan, KR 3,453,198 */ + { 36.7764, 3.0586 }, /* Algiers, DZ 3,415,811 */ + { 34.5809, 105.7311 }, /* Qincheng, CN 3,400,000 */ + { 37.8733, 112.5425 }, /* Taiyuan, CN 3,398,000 */ + { 32.6351, 110.7755 }, /* Shiyan, CN 3,398,000 */ + { 26.8470, 80.9470 }, /* Lucknow, IN 3,382,000 */ + { 41.5757, 120.4486 }, /* Chaoyang, CN 3,370,000 */ + { 24.6928, 108.0850 }, /* Hechi, CN 3,369,251 */ + { 29.5854, 103.7575 }, /* Leshan, CN 3,364,000 */ + { 38.2655, 109.7388 }, /* Yulinshi, CN 3,328,000 */ + { 43.1715, 124.3644 }, /* Siping, CN 3,300,000 */ + { 22.5333, 113.3500 }, /* Zhongshan, CN 3,260,000 */ + { 36.1953, 113.0970 }, /* Changzhi, CN 3,230,000 */ + { 32.8312, -117.1225 }, /* San Diego, CA 3,220,118 */ + { 31.4180, 73.0790 }, /* Faisalabad, PK 3,203,846 */ + { -17.7892, -63.1975 }, /* Santa Cruz, BO 3,151,676 */ + { 39.9398, 119.5881 }, /* Qinhuangdao, CN 3,146,300 */ + { 31.8576, 106.7559 }, /* Bazhou, CN 3,134,000 */ + { 32.2109, 119.4551 }, /* Zhenjiang, CN 3,113,384 */ + { 43.8225, 87.6125 }, /* Ürümqi, CN 3,112,559 */ + { 43.6172, 122.2640 }, /* Tongliao, CN 3,094,600 */ + { 23.7503, 114.6923 }, /* Heyuan, CN 3,093,900 */ + { 27.7233, 109.1885 }, /* Tongren, CN 3,093,204 */ + { 21.9500, 108.6167 }, /* Qinzhou, CN 3,079,721 */ + { 26.9167, 75.8667 }, /* Jaipur, IN 3,073,350 */ + { 38.4178, 112.7233 }, /* Xinzhou, CN 3,067,501 */ + { 9.0272, 38.7369 }, /* Addis Ababa, ET 3,041,002 */ + { 30.0575, 103.8381 }, /* Meishan, CN 3,020,000 */ + { -15.7939, -47.8828 }, /* Brasília, BR 3,015,268 */ + { 36.3069, 59.6042 }, /* Mashhad, IR 3,001,184 */ + { 42.2841, 123.8365 }, /* Tieling, CN 3,000,000 */ + { 41.1144, 121.1292 }, /* Jinzhou, CN 3,000,000 */ + { 24.8011, 113.5927 }, /* Shaoguan, CN 2,997,600 */ + { 22.7664, 115.3331 }, /* Shanwei, CN 2,993,600 */ + { 29.3750, 47.9800 }, /* Kuwait City, KW 2,989,000 */ + { 44.9635, -93.2678 }, /* Minneapolis, MN 2,977,172 */ + { 50.4500, 30.5236 }, /* Kyiv, UA 2,963,199 */ + { 15.3500, 44.2000 }, /* Sanaa, YE 2,957,000 */ + { 14.6333, 121.0333 }, /* Quezon City, PH 2,936,116 */ + { 35.5806, 104.6263 }, /* Dingxi, CN 2,930,000 */ + { 37.4639, 126.6486 }, /* Incheon, KR 2,913,024 */ + { 26.6667, 119.5167 }, /* Ningde, CN 2,910,000 */ + { 27.9942, -82.4451 }, /* Tampa, Florida 2,908,063 */ + { 46.5979, 125.0080 }, /* Daqing, CN 2,904,532 */ + { 40.1833, 29.0667 }, /* Bursa, TR 2,901,396 */ + { 25.4394, 119.0103 }, /* Putian, CN 2,900,000 */ + { 52.4800, -1.9025 }, /* Birmingham, GB 2,897,303 */ + { 30.8695, 120.0958 }, /* Huzhou, CN 2,893,542 */ + { -12.9708, -38.5108 }, /* Salvador, BR 2,886,698 */ + { 23.4833, 111.3167 }, /* Wuzhou, CN 2,882,200 */ + { 27.8431, 112.9228 }, /* Xiangtan, CN 2,881,500 */ + { 39.7621, -104.8759 }, /* Denver, CO 2,876,625 */ + { 41.8931, 12.4828 }, /* Rome, IT 2,872,800 */ + { -16.4942, -68.1475 }, /* La Paz, BO 2,867,504 */ + { 39.0300, 125.7300 }, /* Pyongyang, KP 2,863,000 */ + { 12.0000, 8.5167 }, /* Kano, NG 2,828,861 */ + { 15.6835, 32.4629 }, /* Omdurman, SD 2,805,396 */ + { 24.1500, 120.6667 }, /* Taichung, TW 2,803,894 */ + { 29.3498, 104.7645 }, /* Zigong, CN 2,800,000 */ + { 44.5861, 129.5997 }, /* Mudanjiang, CN 2,790,000 */ + { 40.7094, 120.8378 }, /* Huludao, CN 2,787,000 */ + { 22.6167, 120.3000 }, /* Kaohsiung, TW 2,773,533 */ + { -2.1833, -79.8833 }, /* Guayaquil, EC 2,723,665 */ + { 35.4164, 119.4331 }, /* Rizhao, CN 2,720,000 */ + { 53.4794, -2.2453 }, /* Manchester, GB 2,705,000 */ + { 26.4725, 80.3311 }, /* Cawnpore, IN 2,701,324 */ + { 40.6562, 109.8345 }, /* Baotou, CN 2,700,000 */ + { 26.6448, 118.1728 }, /* Nanping, CN 2,690,000 */ + { 25.0478, 121.5319 }, /* Taipei, TW 2,684,567 */ + { 23.6700, 116.6300 }, /* Chaozhou, CN 2,656,600 */ + { 25.0881, 117.0244 }, /* Longyan, CN 2,640,000 */ + { 40.8151, 111.6629 }, /* Hohhot, CN 2,635,000 */ + { 7.3964, 3.9167 }, /* Ibadan, NG 2,628,000 */ + { 33.5350, 105.3490 }, /* Longba, CN 2,614,000 */ + { -18.9386, 47.5214 }, /* Antananarivo, MG 2,610,000 */ + { 37.5000, 122.1000 }, /* Weihai, CN 2,596,753 */ + { 18.4764, -69.8933 }, /* Santo Domingo, DO 2,581,827 */ + { 22.3350, 91.8325 }, /* Chattogram, BD 2,581,643 */ + { 30.9475, 118.7518 }, /* Xuanzhou, CN 2,580,000 */ + { 26.2658, 117.6302 }, /* Sanming, CN 2,580,000 */ + { 40.6501, -73.9496 }, /* Brooklyn, NY 2,559,903 */ + { 21.8556, 111.9627 }, /* Yangjiang, CN 2,555,600 */ + { 6.2447, -75.5748 }, /* Medellín, CO 2,529,403 */ + { 22.9242, 112.0353 }, /* Yunfu, CN 2,526,900 */ + { -27.4678, 153.0281 }, /* Brisbane, AU 2,514,184 */ + { 25.1211, 99.1690 }, /* Baoshan, CN 2,506,491 */ + { 25.2697, 55.3094 }, /* Dubai, AE 2,502,715 */ + { 35.7278, 107.6400 }, /* Qinbaling, CN 2,500,000 */ + { 33.5830, 114.0109 }, /* Luohe, CN 2,500,000 */ + { 25.1500, 82.5800 }, /* Mirzāpur, IN 2,496,970 */ + { 32.4353, 105.8398 }, /* Guangyuan, CN 2,484,122 */ + { 30.2018, 115.0326 }, /* Huangshi, CN 2,471,700 */ + { 3.4400, -76.5197 }, /* Cali, CO 2,471,474 */ + { 35.8667, 128.6000 }, /* Daegu, KR 2,461,002 */ + { -3.7275, -38.5275 }, /* Fortaleza, BR 2,452,185 */ + { 14.6099, -90.5252 }, /* Guatemala City, GT 2,450,212 */ + { 4.0500, 9.7000 }, /* Douala, CM 2,446,945 */ + { 3.8578, 11.5181 }, /* Yaoundé, CM 2,440,462 */ + { 23.8864, 100.0871 }, /* Lincang, CN 2,429,497 */ + { 36.9081, 30.6956 }, /* Antalya, TR 2,426,356 */ + { 40.7503, 120.8300 }, /* Lianshan, CN 2,426,000 */ + { 41.3000, 69.2667 }, /* Tashkent, UZ 2,424,100 */ + { 32.4831, 117.0164 }, /* Huainan, CN 2,409,000 */ + { 21.1539, 79.0831 }, /* Nāgpur, IN 2,405,665 */ + { 40.1167, 124.3833 }, /* Dandong, CN 2,400,000 */ + { 33.8680, 109.9244 }, /* Shangzhou, CN 2,400,000 */ + { 43.8500, 126.5500 }, /* Jilin, CN 2,396,000 */ + { -6.9500, 107.5667 }, /* Bandung, ID 2,394,873 */ + { 32.5250, -117.0333 }, /* Tijuana, MX 2,384,609 */ + { 28.6667, 77.4167 }, /* Ghāziābād, IN 2,381,452 */ + { -6.2333, 107.0000 }, /* Bekasi, ID 2,381,053 */ + { 46.8081, 130.3653 }, /* Jiamusi, CN 2,360,000 */ + { 24.3495, 102.5432 }, /* Yuxi, CN 2,303,518 */ + { 26.2456, 105.9340 }, /* Anshun, CN 2,297,612 */ + { 5.6037, -0.1870 }, /* Accra, GH 2,291,352 */ + { 49.2500, -123.1000 }, /* Vancouver, CA 2,264,823 */ + { -6.1783, 106.6319 }, /* Tangerang, ID 2,237,006 */ + { 37.8714, 32.4847 }, /* Konya, TR 2,232,374 */ + { 40.7498, -73.7976 }, /* Queens, NY 2,230,722 */ + { 37.0000, 35.3250 }, /* Adana, TR 2,220,125 */ + { 40.6653, 122.2297 }, /* Yingkou, CN 2,220,000 */ + { 34.7736, 111.1950 }, /* Sanmenxia, CN 2,213,000 */ + { 3.6667, 98.6667 }, /* Medan, ID 2,210,625 */ + { 31.7135, 118.3605 }, /* Ma’anshan, CN 2,202,899 */ + { 22.7206, 75.8472 }, /* Indore, IN 2,201,927 */ + { 35.5412, 106.6819 }, /* Pingliang, CN 2,190,000 */ + { 28.9545, 118.8763 }, /* Quzhou, CN 2,185,000 */ + { 40.3667, 49.8352 }, /* Baku, AZ 2,181,800 */ + { 30.7804, 106.1300 }, /* Gaoping, CN 2,174,000 */ + { 33.9562, 116.7890 }, /* Huaibei, CN 2,158,000 */ + { 36.6239, 101.7787 }, /* Xining, CN 2,154,000 */ + { 36.5952, 109.4863 }, /* Yan’an, CN 2,150,000 */ + { -17.8292, 31.0522 }, /* Harare, ZW 2,150,000 */ + { 23.1367, -82.3589 }, /* Havana, CU 2,141,652 */ + { 11.5696, 104.9210 }, /* Phnom Penh, KH 2,129,371 */ + { 33.6000, 130.4167 }, /* Fukuoka, JP 2,128,000 */ + { 2.0408, 45.3425 }, /* Mogadishu, SO 2,120,000 */ + { 35.4906, 112.8483 }, /* Jincheng, CN 2,120,000 */ + { 23.2993, 116.1586 }, /* Puning, CN 2,118,200 */ + { 28.4500, 119.9167 }, /* Lishui, CN 2,116,957 */ + { 24.8141, 118.5792 }, /* Qingyang, CN 2,111,000 */ + { 33.9381, -117.3948 }, /* Riverside, CA 2,107,852 */ + { 39.3051, -76.6144 }, /* Baltimore, MD 2,106,068 */ + { 36.2333, -115.2654 }, /* Las Vegas, NV 2,104,198 */ + { 20.8000, 106.6667 }, /* Haiphong, VN 2,103,500 */ + { 23.7333, 109.2333 }, /* Laibin, CN 2,099,711 */ + { 33.6007, 73.0679 }, /* Rawalpindi, PK 2,098,231 */ + { 45.5372, -122.6500 }, /* Portland, OR 2,074,775 */ + { 6.6833, -1.6167 }, /* Kumasi, GH 2,069,350 */ + { 22.3000, 73.2000 }, /* Vadodara, IN 2,065,771 */ + { -31.9522, 115.8589 }, /* Perth, AU 2,059,484 */ + { 29.4658, -98.5253 }, /* San Antonio, TX 2,049,293 */ + { 17.7333, 83.3167 }, /* Vishākhapatnam, IN 2,035,922 */ + { 37.0667, 37.3833 }, /* Gaziantep, TR 2,028,563 */ + { 32.1500, 74.1833 }, /* Gujranwala, PK 2,027,001 */ + { 38.6358, -90.2451 }, /* St. Louis, MO 2,024,074 */ + { 41.8708, 123.8917 }, /* Fushun, CN 2,024,000 */ + { -0.2186, -78.5097 }, /* Quito, EC 2,011,388 */ + { 53.9022, 27.5618 }, /* Minsk, BY 2,009,786 */ + { 12.6458, -7.9922 }, /* Bamako, ML 2,009,109 */ + { 27.6333, 113.8500 }, /* Pingxiang, CN 2,001,027 */ + { 22.4167, 107.3667 }, /* Chongzuo, CN 1,994,285 */ + { 37.1583, 38.7917 }, /* Şanlıurfa, TR 1,985,753 */ + { -5.8970, 22.4488 }, /* Kananga, CD 1,971,704 */ + { 34.0000, 71.5000 }, /* Peshawar, PK 1,970,042 */ + { 43.0621, 141.3544 }, /* Sapporo, JP 1,961,690 */ + { 24.4164, 111.5478 }, /* Hezhou, CN 1,954,072 */ + { 45.2937, 130.9650 }, /* Jixi, CN 1,950,000 */ + { 10.5000, -66.9333 }, /* Caracas, VE 1,943,901 */ + { 42.0127, 121.6486 }, /* Fuxin, CN 1,930,000 */ + { 35.3333, 40.1500 }, /* Dayr az Zawr, SY 1,918,000 */ + { 43.2500, 76.9000 }, /* Almaty, KZ 1,916,822 */ + { 36.2000, 37.1500 }, /* Aleppo, SY 1,916,781 */ + { 48.2083, 16.3731 }, /* Vienna, AT 1,911,191 */ + { 53.7997, -1.5492 }, /* Leeds, GB 1,901,934 */ + { 38.5667, -121.4683 }, /* Sacramento, CA 1,898,019 */ + { -15.7861, 35.0058 }, /* Blantyre, MW 1,895,973 */ + { 22.2769, 113.5678 }, /* Zhuhai, CN 1,891,100 */ + { 37.9278, 102.6329 }, /* Wuwei, CN 1,890,000 */ + { 22.9833, 120.1833 }, /* Tainan, TW 1,883,831 */ + { 44.4000, 26.0833 }, /* Bucharest, RO 1,883,425 */ + { 23.2500, 77.4167 }, /* Bhopāl, IN 1,883,381 */ + { -25.4297, -49.2719 }, /* Curitiba, BR 1,879,355 */ + { 40.0800, 113.3000 }, /* Xiping, CN 1,873,000 */ + { 30.1978, 71.4711 }, /* Multan, PK 1,871,843 */ + { -25.3000, -57.6333 }, /* Asunción, PY 1,870,000 */ + { 34.7500, 72.3572 }, /* Saidu Sharif, PK 1,860,310 */ + { 53.5500, 10.0000 }, /* Hamburg, DE 1,841,179 */ + { 0.0500, 37.6500 }, /* Meru, KE 1,833,000 */ + { -4.2667, 15.2833 }, /* Brazzaville, CG 1,827,000 */ + { 28.4772, -81.3369 }, /* Orlando, FL 1,822,394 */ + { 36.8000, 34.6167 }, /* Mersin, TR 1,814,468 */ + { 35.0111, 135.7669 }, /* Kyōto, JP 1,805,000 */ + { -3.1000, -60.0167 }, /* Manaus, BR 1,802,014 */ + { 41.2643, 123.1772 }, /* Liaoyang, CN 1,800,000 */ + { 36.5448, 104.1766 }, /* Baiyin, CN 1,799,000 */ + { 37.3019, -121.8486 }, /* San Jose, CA 1,798,103 */ + { 52.2167, 21.0333 }, /* Warsaw, PL 1,790,658 */ + { 37.4500, 118.4667 }, /* Shengli, CN 1,790,000 */ + { -11.6697, 27.4581 }, /* Lubumbashi, CD 1,786,397 */ + { 20.0200, 110.3200 }, /* Haikou, CN 1,776,141 */ + { 34.1299, 118.7734 }, /* Shuyangzha, CN 1,770,000 */ + { 32.6447, 51.6675 }, /* Eşfahān, IR 1,756,126 */ + { 33.5131, 36.2919 }, /* Damascus, SY 1,754,000 */ + { 47.4983, 19.0408 }, /* Budapest, HU 1,752,286 */ + { 50.2458, 127.4886 }, /* Heihe, CN 1,750,000 */ + { 50.8333, 4.3333 }, /* Brussels, BE 1,743,000 */ + { -15.4167, 28.2833 }, /* Lusaka, ZM 1,742,979 */ + { 25.3792, 68.3683 }, /* Hyderabad City, PK 1,732,693 */ + { 37.9108, 40.2367 }, /* Diyarbakır, TR 1,732,396 */ + { 18.6278, 73.8131 }, /* Chinchvad, IN 1,729,320 */ + { 39.3408, 112.4292 }, /* Shuozhou, CN 1,714,857 */ + { 41.4767, -81.6804 }, /* Cleveland, OH 1,710,093 */ + { 40.4396, -79.9762 }, /* Pittsburgh, PA 1,703,266 */ + { 36.3667, 43.1167 }, /* Mosul, IQ 1,694,000 */ + { 30.3004, -97.7522 }, /* Austin, TX 1,687,311 */ + { 25.6100, 85.1414 }, /* Patna, IN 1,684,222 */ + { 30.8200, 108.4000 }, /* Sanzhou, CN 1,680,000 */ + { 21.4225, 39.8261 }, /* Mecca, SA 1,675,368 */ + { 9.5092, -13.7122 }, /* Conakry, GN 1,667,864 */ + { 39.1413, -84.5061 }, /* Cincinnati, OH 1,662,691 */ + { 0.3136, 32.5811 }, /* Kampala, UG 1,659,600 */ + { 19.6097, -99.0600 }, /* Ecatepec, MX 1,656,107 */ + { 31.3867, 120.9766 }, /* Yushan, CN 1,651,200 */ + { -5.1331, 119.4136 }, /* Makassar, ID 1,651,146 */ + { 55.0077, -1.6578 }, /* Newcastle, GB 1,650,000 */ + { 30.9083, 75.8486 }, /* Ludhiāna, IN 1,649,000 */ + { 39.1239, -94.5541 }, /* Kansas City, MO 1,636,715 */ + { 7.0667, 125.6000 }, /* Davao, PH 1,632,991 */ + { 24.9650, 121.2168 }, /* Zhongli, TW 1,632,616 */ + { -6.3940, 106.8225 }, /* Depok, ID 1,631,951 */ + { 40.7834, -73.9662 }, /* Manhattan, NY 1,628,706 */ + { 12.3572, -1.5353 }, /* Ouagadougou, BF 1,626,950 */ + { -6.9667, 110.4167 }, /* Semarang, ID 1,621,384 */ + { 38.4795, 106.2254 }, /* Yinchuan, CN 1,616,000 */ + { 35.0833, 117.1500 }, /* Chengtangcun, CN 1,603,659 */ + { 55.0333, 82.9167 }, /* Novosibirsk, RU 1,602,915 */ + { 35.8327, 50.9915 }, /* Karaj, IR 1,592,492 */ + { 39.7771, -86.1458 }, /* Indianapolis, IN 1,588,961 */ + { 29.2942, 117.2036 }, /* Jingdezhen, CN 1,587,477 */ + { 27.1800, 78.0200 }, /* Āgra, IN 1,585,705 */ + { 14.6500, 120.9667 }, /* Caloocan City, PH 1,583,978 */ + { 19.2502, 73.1602 }, /* Kalyān, IN 1,576,614 */ + { 19.0333, -98.1833 }, /* Puebla, MX 1,576,259 */ + { 41.2920, 123.7610 }, /* Benxi, CN 1,567,000 */ + { 39.9862, -82.9850 }, /* Columbus, OH 1,562,009 */ + { 9.9197, 78.1194 }, /* Madurai, IN 1,561,129 */ + { 38.0833, 46.2833 }, /* TabrÄ«z, IR 1,558,693 */ + { 22.8000, 86.1833 }, /* Jamshedpur, IN 1,558,000 */ + { -8.0539, -34.8808 }, /* Recife, BR 1,555,039 */ + { 10.6333, -71.6333 }, /* Maracaibo, VE 1,551,539 */ + { 29.1255, 110.4844 }, /* Zhangjiajie, CN 1,549,200 */ + { 21.4667, 109.1000 }, /* Beihai, CN 1,539,251 */ + { 46.6388, 131.1545 }, /* Shuangyashan, CN 1,530,000 */ + { 34.6913, 135.1830 }, /* Kōbe, JP 1,513,193 */ + { 35.2080, -80.8304 }, /* Charlotte, NC 1,512,923 */ + { 29.9888, 103.0007 }, /* Yucheng, CN 1,512,000 */ + { 31.6500, 120.7333 }, /* Changshu, CN 1,510,100 */ + { 21.6146, 110.2794 }, /* Lianjiang, CN 1,509,400 */ + { 24.9633, 118.3811 }, /* Ximeicun, CN 1,508,000 */ + { 28.1958, 115.7833 }, /* Jianguang, CN 1,507,402 */ + { 30.1697, 121.2665 }, /* Xushan, CN 1,502,000 */ + { 29.9361, 30.9269 }, /* MadÄ«nat as Sādis min UktÅ«bar, EG 1,500,000 */ + { -1.4558, -48.5039 }, /* Belém, BR 1,499,641 */ + { 23.4000, 110.0833 }, /* Guiping, CN 1,496,904 */ + { 20.9147, 110.0806 }, /* Leizhou, CN 1,494,700 */ + { 35.1667, 126.9167 }, /* Gwangju, KR 1,490,092 */ + { 20.0000, 73.7833 }, /* Nāsik, IN 1,486,053 */ + { -30.0328, -51.2300 }, /* Porto Alegre, BR 1,484,941 */ + { 10.1667, -68.0000 }, /* Valencia, VE 1,484,430 */ + { 6.1667, 6.7833 }, /* Onitsha, NG 1,483,000 */ + { 36.7335, -76.0435 }, /* Virginia Beach, VA 1,478,868 */ + { 36.3510, 127.3850 }, /* Daejeon, KR 1,475,221 */ + { 48.1372, 11.5755 }, /* Munich, DE 1,471,508 */ + { -36.8500, 174.7833 }, /* Auckland, NZ 1,470,100 */ + { 29.7132, 118.3151 }, /* Huangshan, CN 1,470,000 */ + { 56.8356, 60.6128 }, /* Yekaterinburg, RU 1,468,833 */ + { 32.6889, 112.0447 }, /* Huazhou, CN 1,468,061 */ + { 29.6100, 52.5425 }, /* ShÄ«rāz, IR 1,460,665 */ + { 34.3422, 118.0097 }, /* Pizhou, CN 1,458,038 */ + { 21.1167, -101.6833 }, /* León de los Aldama, MX 1,454,793 */ + { -2.9833, 104.7644 }, /* Palembang, ID 1,452,456 */ + { 32.0500, -7.4000 }, /* El Kelaa des Srarhna, MA 1,450,021 */ + { 50.0000, 36.2292 }, /* Kharkiv, UA 1,446,107 */ + { 35.5300, 139.7050 }, /* Kawanakajima, JP 1,437,266 */ + { 31.8775, 120.5512 }, /* Yangshe, CN 1,432,044 */ + { 30.6583, 117.4849 }, /* Chizhou, CN 1,430,000 */ + { 36.0080, 106.2782 }, /* Guyuan, CN 1,426,000 */ + { 27.7780, 120.6526 }, /* Rui’an, CN 1,424,667 */ + { 52.6736, -1.1200 }, /* Birstall, GB 1,424,216 */ + { 23.6139, 58.5922 }, /* Muscat, OM 1,421,409 */ + { 35.7497, 114.2887 }, /* Hebi, CN 1,419,000 */ + { 40.8501, -73.8662 }, /* Bronx, NY 1,418,207 */ + { 21.9135, 110.8481 }, /* Gaozhou, CN 1,414,100 */ + { 52.0767, 4.2986 }, /* The Hague, NL 1,406,000 */ + { 5.4833, 7.0333 }, /* Owerri, NG 1,401,873 */ + { 25.3575, 55.3919 }, /* Sharjah, AE 1,400,000 */ + { 47.9203, 106.9172 }, /* Ulaanbaatar, MN 1,396,288 */ + { 28.4333, 77.3167 }, /* FarÄ«dābād, IN 1,394,000 */ + { -16.6806, -49.2564 }, /* Goiânia, BR 1,393,575 */ + { 38.7333, 35.4833 }, /* Kayseri, TR 1,389,680 */ + { 28.1188, 120.9621 }, /* Yueqing, CN 1,389,332 */ + { 36.7833, 119.9556 }, /* Pingdu, CN 1,378,900 */ + { 44.8167, 20.4667 }, /* Belgrade, RS 1,378,682 */ + { 19.8800, 75.3200 }, /* Aurangābād, IN 1,371,330 */ + { 28.3147, 112.5540 }, /* Yutan, CN 1,368,117 */ + { 28.3797, 121.3718 }, /* Wenling, CN 1,366,794 */ + { 45.4669, 9.1900 }, /* Milan, IT 1,366,180 */ + { 43.0642, -87.9673 }, /* Milwaukee, WI 1,365,787 */ + { 42.6979, 23.3217 }, /* Sofia, BG 1,355,142 */ + { -34.9289, 138.6011 }, /* Adelaide, AU 1,345,777 */ + { 27.2578, 111.7351 }, /* Liangshi, CN 1,335,900 */ + { 41.2867, 36.3300 }, /* Samsun, TR 1,335,716 */ + { 22.2969, 70.7984 }, /* Rājkot, IN 1,335,397 */ + { 50.0833, 14.4167 }, /* Prague, CZ 1,335,084 */ + { -31.4167, -64.1833 }, /* Córdoba, AR 1,329,604 */ + { -23.4667, -46.5333 }, /* Guarulhos, BR 1,324,781 */ + { 31.7386, -106.4870 }, /* Juárez, MX 1,321,004 */ + { 35.8617, 139.6453 }, /* Saitama, JP 1,320,571 */ + { -34.8667, -56.1667 }, /* Montevideo, UY 1,319,108 */ + { 25.7232, 119.3735 }, /* Fuqing, CN 1,316,000 */ + { 35.9100, 117.7800 }, /* Xintai, CN 1,315,942 */ + { 25.3000, 51.5333 }, /* Doha, QA 1,312,947 */ + { 22.8167, 89.5500 }, /* Khulna, BD 1,311,100 */ + { 34.4000, 132.4500 }, /* Hiroshima, JP 1,306,589 */ + { 28.9900, 77.7000 }, /* Meerut, IN 1,305,429 */ + { 44.8249, 126.5451 }, /* Yushu, CN 1,304,436 */ + { 26.2312, 104.0966 }, /* Rongcheng, CN 1,302,891 */ + { 21.6540, 110.6294 }, /* Huazhou, CN 1,302,100 */ + { 37.8576, 113.5762 }, /* Yangquan, CN 1,300,000 */ + { -6.1209, 23.5967 }, /* Mbuji-Mayi, CD 1,295,000 */ + { 40.8523, 122.7474 }, /* Haicheng, CN 1,293,877 */ + { 28.2333, 117.0000 }, /* Yingtan, CN 1,288,615 */ + { 37.9874, 106.1919 }, /* Wuzhong, CN 1,284,000 */ + { 10.9639, -74.7964 }, /* Barranquilla, CO 1,274,250 */ + { 38.9355, 100.4553 }, /* Zhangye, CN 1,270,000 */ + { 23.1667, 79.9333 }, /* Jabalpur, IN 1,267,564 */ + { 32.3852, 120.5634 }, /* Rucheng, CN 1,267,066 */ + { 56.3269, 44.0075 }, /* Nizhniy Novgorod, RU 1,264,075 */ + { 33.5800, 119.0300 }, /* Huaiyin, CN 1,264,000 */ + { 19.1800, 72.9633 }, /* Thāne, IN 1,261,517 */ + { 32.9387, 119.8404 }, /* Shaoyang, CN 1,253,548 */ + { 47.7235, 128.8893 }, /* Yichun, CN 1,250,000 */ + { 14.0833, -87.2167 }, /* Comayagüela, HN 1,250,000 */ + { 36.1833, 117.6667 }, /* Laiwu, CN 1,248,636 */ + { 30.6667, 113.1667 }, /* Jingling, CN 1,247,400 */ + { 23.7928, 86.4350 }, /* Dhanbād, IN 1,246,000 */ + { 26.8808, 100.2208 }, /* Dayan, CN 1,244,769 */ + { 55.7908, 49.1144 }, /* Kazan, RU 1,243,500 */ + { 31.9087, 120.2653 }, /* Jiangyin, CN 1,241,045 */ + { 33.9317, 116.4459 }, /* Yongcheng, CN 1,240,382 */ + { 51.0500, -114.0667 }, /* Calgary, CA 1,239,220 */ + { 10.0333, 105.7833 }, /* Cần ThÆ¡, VN 1,237,300 */ + { 9.0556, 7.4914 }, /* Abuja, NG 1,235,880 */ + { 37.2858, 127.0100 }, /* Suwon, KR 1,234,300 */ + { 29.3081, 120.0698 }, /* Yiwu, CN 1,234,015 */ + { 30.4889, 47.8100 }, /* Al Başrah, IQ 1,225,793 */ + { 21.9769, 96.0869 }, /* Mandalay, MM 1,225,546 */ + { 34.6000, 105.9200 }, /* Beidao, CN 1,225,000 */ + { 26.5944, 104.8333 }, /* Shuangshui, CN 1,221,000 */ + { 3.2167, -51.2167 }, /* Vila Velha, BR 1,209,091 */ + { 41.8230, -71.4187 }, /* Providence, RI 1,203,230 */ + { 55.1500, 61.4000 }, /* Chelyabinsk, RU 1,202,371 */ + { 34.6461, 50.8789 }, /* Qom, IR 1,201,158 */ + { 25.4550, 81.8400 }, /* Allahābād, IN 1,201,000 */ + { -4.0500, 39.6667 }, /* Mombasa, KE 1,200,000 */ + { 25.3189, 83.0128 }, /* Vārānasi, IN 1,198,491 */ + { 11.8333, 13.1500 }, /* Maiduguri, NG 1,197,497 */ + { -32.9575, -60.6394 }, /* Rosario, AR 1,193,605 */ + { -25.9153, 32.5764 }, /* Maputo, MZ 1,191,613 */ + { 6.3176, 5.6145 }, /* Benin City, NG 1,190,000 */ + { 27.7950, 114.9242 }, /* Xinyu, CN 1,186,700 */ + { 31.3203, 48.6692 }, /* Ahvāz, IR 1,184,788 */ + { 30.3322, -81.6749 }, /* Jacksonville, FL 1,181,496 */ + { 24.4667, 39.6000 }, /* Medina, SA 1,180,770 */ + { 34.0911, 74.8061 }, /* SrÄ«nagar, IN 1,180,570 */ + { 54.9667, 73.3833 }, /* Omsk, RU 1,178,391 */ + { -7.7167, 109.0170 }, /* Cilacap, ID 1,174,964 */ + { 53.3497, -6.2603 }, /* Dublin, IE 1,173,179 */ + { 14.7500, -17.4000 }, /* Pikine, SN 1,170,791 */ + { 53.1833, 50.1167 }, /* Samara, RU 1,169,719 */ + { 28.1417, 113.6250 }, /* Guankou, CN 1,168,056 */ + { -5.4294, 105.2625 }, /* Bandar Lampung, ID 1,166,761 */ + { 35.5500, 129.3167 }, /* Ulsan, KR 1,166,033 */ + { 38.5158, 114.9845 }, /* Dingzhou, CN 1,165,182 */ + { -22.9009, -47.0573 }, /* Campinas, BR 1,164,098 */ + { 27.6961, 111.6659 }, /* Lianyuan, CN 1,162,928 */ + { 29.8239, 112.9019 }, /* Rongcheng, CN 1,162,770 */ + { 19.7475, 96.1150 }, /* Nay Pyi Taw, MM 1,160,242 */ + { 36.0656, 113.8153 }, /* Kaiyuan, CN 1,160,000 */ + { 29.7169, 120.2314 }, /* Zhuji, CN 1,157,938 */ + { -1.9536, 30.0606 }, /* Kigali, RW 1,156,663 */ + { 20.7167, -103.4000 }, /* Zapopan, MX 1,155,790 */ + { 26.4179, 112.8457 }, /* Leiyang, CN 1,151,554 */ + { 14.7319, -17.4572 }, /* Dakar, SN 1,146,053 */ + { 26.5849, 101.7149 }, /* Dadukou, CN 1,144,000 */ + { 19.4500, -70.7000 }, /* Santiago, DO 1,142,947 */ + { 30.3833, 113.4000 }, /* Xiantao, CN 1,140,100 */ + { 31.6167, 74.8500 }, /* Amritsar, IN 1,132,383 */ + { 34.1511, 113.4733 }, /* Yingchuan, CN 1,131,896 */ + { 27.8800, 78.0800 }, /* AlÄ«garh, IN 1,131,160 */ + { -12.0611, -77.1333 }, /* Callao, PE 1,129,854 */ + { 14.0942, -87.2067 }, /* Tegucigalpa, HN 1,126,534 */ + { 32.8752, 13.1875 }, /* Tripoli, LY 1,126,000 */ + { 19.3000, 73.0667 }, /* Bhiwandi, IN 1,125,898 */ + { 47.2333, 39.7167 }, /* Rostov, RU 1,125,299 */ + { 30.0162, 122.0988 }, /* Zhoushan, CN 1,121,261 */ + { 41.7225, 44.7925 }, /* Tbilisi, GE 1,118,035 */ + { 54.7333, 55.9667 }, /* Ufa, RU 1,115,560 */ + { 34.0433, -5.0033 }, /* Fès, MA 1,112,072 */ + { 19.4000, -98.9889 }, /* Nezahualcóyotl, MX 1,110,565 */ + { 19.4100, -99.0300 }, /* Ciudad Nezahualcóyotl, MX 1,109,363 */ + { 37.3900, -5.9900 }, /* Sevilla, ES 1,107,000 */ + { 10.9277, 106.8681 }, /* Biên Hòa, VN 1,104,000 */ + { 32.6633, -115.4678 }, /* Mexicali, MX 1,102,342 */ + { 26.2150, 78.1931 }, /* Gwalior, IN 1,101,981 */ + { -12.7667, 15.7333 }, /* Huambo, AO 1,100,000 */ + { 32.6877, 109.0235 }, /* Ankang, CN 1,100,000 */ + { 47.3139, 130.2775 }, /* Hegang, CN 1,100,000 */ + { 7.5304, 5.7600 }, /* Ikare, NG 1,099,931 */ + { 40.7777, -111.9306 }, /* Salt Lake City, UT 1,098,526 */ + { 21.2167, 81.4333 }, /* Bhilai, IN 1,097,000 */ + { 30.0372, 121.1546 }, /* Yuyao, CN 1,095,000 */ + { 30.6520, 113.8274 }, /* Hanchuan, CN 1,092,700 */ + { 43.5036, 124.8088 }, /* Gongzhuling, CN 1,092,692 */ + { 12.1100, 15.0500 }, /* N’Djamena, TD 1,092,066 */ + { 32.5556, 35.8500 }, /* Irbid, JO 1,088,100 */ + { 50.9422, 6.9578 }, /* Cologne, DE 1,085,664 */ + { 56.0167, 92.8667 }, /* Krasnoyarsk, RU 1,083,865 */ + { 31.3697, 119.8239 }, /* Yicheng, CN 1,082,929 */ + { 36.1715, -86.7843 }, /* Nashville, TN 1,081,903 */ + { 51.1333, 71.4333 }, /* Nur-Sultan, KZ 1,078,362 */ + { -22.8269, -43.0539 }, /* São Gonçalo, BR 1,077,687 */ + { 18.0858, -15.9785 }, /* Nouakchott, MR 1,077,169 */ + { 22.5900, 88.3100 }, /* Hāora, IN 1,077,075 */ + { 40.1814, 44.5144 }, /* Yerevan, AM 1,075,800 */ + { 37.5295, -77.4756 }, /* Richmond, VA 1,075,798 */ + { -26.6736, 27.9319 }, /* Vereeniging, ZA 1,074,000 */ + { 32.1724, 120.0142 }, /* Taixing, CN 1,073,921 */ + { -2.5300, -44.3028 }, /* São Luís, BR 1,073,893 */ + { 15.5000, -88.0333 }, /* San Pedro Sula, HN 1,073,824 */ + { 23.3556, 85.3347 }, /* Rānchi, IN 1,073,440 */ + { 35.1046, -89.9773 }, /* Memphis, TN 1,066,967 */ + { 53.5344, -113.4903 }, /* Edmonton, CA 1,062,643 */ + { 37.6564, 126.8350 }, /* Goyang, KR 1,061,929 */ + { 35.9900, 119.3801 }, /* Mizhou, CN 1,060,000 */ + { 27.6609, 113.4946 }, /* Xishan, CN 1,060,000 */ + { 30.3972, 114.8842 }, /* Ezhou, CN 1,059,700 */ + { 10.0678, -69.3467 }, /* Barquisimeto, VE 1,059,092 */ + { 38.2683, 140.8694 }, /* Sendai, JP 1,058,070 */ + { 36.8008, 10.1800 }, /* Tunis, TN 1,056,247 */ + { 16.5167, 80.6167 }, /* Bezwāda, IN 1,048,240 */ + { 58.0139, 56.2489 }, /* Perm, RU 1,048,005 */ + { 51.6717, 39.2106 }, /* Voronezh, RU 1,047,549 */ + { 35.2281, 128.6811 }, /* Changwon, KR 1,046,054 */ + { 37.5139, 105.1884 }, /* Zhongwei, CN 1,046,000 */ + { 36.8833, 118.7333 }, /* Shouguang, CN 1,039,205 */ + { 35.8325, -78.6435 }, /* Raleigh, NC 1,038,738 */ + { 10.4236, -75.5253 }, /* Cartagena, CO 1,036,412 */ + { -25.9667, 32.4667 }, /* Matola, MZ 1,032,197 */ + { 8.1333, 4.2500 }, /* Ogbomoso, NG 1,032,000 */ + { 37.9500, 58.3833 }, /* Ashgabat, TM 1,031,992 */ + { -6.6000, 106.8000 }, /* Bogor, ID 1,030,720 */ + { 40.9833, 27.5167 }, /* Tekirdağ, TR 1,029,927 */ + { 1.0678, 104.0167 }, /* Patam, ID 1,029,808 */ + { -9.6658, -35.7350 }, /* Maceió, BR 1,029,129 */ + { 28.8523, 121.1409 }, /* Linhai, CN 1,028,813 */ + { 12.1500, -86.2667 }, /* Managua, NI 1,028,808 */ + { 42.8667, 74.5667 }, /* Bishkek, KG 1,027,200 */ + { 13.5086, 2.1111 }, /* Niamey, NE 1,026,848 */ + { 30.7353, 76.7911 }, /* ChandÄ«garh, IN 1,026,459 */ + { 30.1286, 31.2422 }, /* Shubrā al Khaymah, EG 1,025,569 */ + { 39.6271, 121.9972 }, /* Wafangdian, CN 1,024,876 */ + { 31.1690, 112.5853 }, /* Zhongxiang, CN 1,022,514 */ + { 6.3106, -10.8047 }, /* Monrovia, LR 1,021,762 */ + { 30.0687, -89.9288 }, /* New Orleans, LA 1,020,886 */ + { 42.3000, 69.6000 }, /* Shymkent, KZ 1,018,974 */ + { 46.4775, 30.7326 }, /* Odesa, UA 1,017,699 */ + { 48.7086, 44.5147 }, /* Volgograd, RU 1,015,586 */ + { 33.6989, 73.0369 }, /* Islamabad, PK 1,014,825 */ + { 12.3086, 76.6531 }, /* Mysore, IN 1,014,227 */ + { 22.3559, 110.9369 }, /* Xinyi, CN 1,013,900 */ + { 10.8199, 106.7909 }, /* Thủ Đức, VN 1,013,795 */ + { 21.2379, 81.6337 }, /* Raipur, IN 1,010,087 */ + { -16.3988, -71.5369 }, /* Arequipa, PE 1,008,290 */ + { 43.7034, 7.2663 }, /* Nice, FR 1,006,402 */ + { 4.7500, 7.0000 }, /* Port Harcourt, NG 1,005,904 */ + { 38.1663, -85.6485 }, /* Louisville, KY 1,005,654 */ + { 32.1287, 112.7581 }, /* Zaoyang, CN 1,004,741 */ + { 33.4433, 114.8994 }, /* Shuizhai, CN 1,003,698 */ + { 48.4500, 34.9833 }, /* Dnipro, UA 1,002,111 */ + { 25.1800, 75.8300 }, /* Kota, IN 1,001,694 */ + { 30.1920, 67.0070 }, /* Quetta, PK 1,001,205 */ + { 28.3640, 79.4150 }, /* Bareilly, IN 1,000,000 */ + { 24.4781, 54.3686 }, /* Abu Dhabi, AE 1,000,000 */ + { 16.0600, 108.2500 }, /* Quảng Hà, VN 1,000,000 */ + + { 18.5425, -72.3386 }, /* Port-au-Prince, HT 987,310 */ + { 27.7167, 85.3667 }, /* Kathmandu, NP 975,453 */ + { 35.4676, -97.5136 }, /* Oklahoma City, OK 972,943 */ + { 59.3294, 18.0686 }, /* Stockholm, SE 972,647 */ + { 15.3333, 38.9167 }, /* Asmara, ER 963,000 */ + { 8.4833, -13.2331 }, /* Freetown, SL 951,000 */ + { 31.7833, 35.2167 }, /* Jerusalem, IL 919,438 */ + { 41.7661, -72.6834 }, /* Hartford, CT 905,152 */ + { 4.3732, 18.5628 }, /* Bangui, CF 889,231 */ + { 9.0000, -79.5000 }, /* Panama City, PA 880,691 */ + { 52.3667, 4.8833 }, /* Amsterdam, NL 862,965 */ + { 6.1319, 1.2228 }, /* Lomé, TG 837,437 */ + { 21.3294, -157.8460 }, /* Honolulu, HI 820,987 */ + { 0.3901, 9.4544 }, /* Libreville, GA 797,003 */ + { 45.8000, 15.9500 }, /* Zagreb, HR 790,017 */ + { -13.9833, 33.7833 }, /* Lilongwe, MW 781,538 */ + { 38.5731, 68.7864 }, /* Dushanbe, TJ 778,500 */ + { 6.4000, 2.5200 }, /* Cotonou, BJ 762,000 */ + { 17.9667, 102.6000 }, /* Vientiane, LA 760,000 */ + { 6.9167, 79.8333 }, /* Colombo, LK 752,993 */ + { -25.7464, 28.1881 }, /* Pretoria, ZA 741,651 */ + { 59.9111, 10.7528 }, /* Oslo, NO 693,494 */ + { 37.9842, 23.7281 }, /* Athens, GR 664,046 */ + { -3.3825, 29.3611 }, /* Bujumbura, BI 658,859 */ + { 60.1756, 24.9342 }, /* Helsinki, FI 642,045 */ + { 41.9833, 21.4333 }, /* Skopje, MK 640,000 */ + { 47.0228, 28.8353 }, /* Chisinau, MD 639,000 */ + { 56.9475, 24.1069 }, /* Riga, LV 614,618 */ + { 55.6761, 12.5689 }, /* Copenhagen, DK 602,481 */ + { 42.6664, -73.7987 }, /* Albany, NY 586,383 */ + { 17.9714, -76.7931 }, /* Kingston, JM 580,000 */ + { 54.6833, 25.2833 }, /* Vilnius, LT 574,147 */ + { 34.0253, -6.8361 }, /* Rabat, MA 572,717 */ + { 30.4418, -91.1310 }, /* Baton Rouge, LA 570,308 */ + { 13.6989, -89.1914 }, /* San Salvador, SV 567,698 */ + { 11.5950, 43.1481 }, /* Djibouti, DJ 562,000 */ + { 34.0376, -80.9037 }, /* Columbia, SC 560,041 */ + { 38.7452, -9.1604 }, /* Lisbon, PT 506,654 */ + { 41.5725, -93.6105 }, /* Des Moines, IA 473,957 */ + { 43.0826, -89.3931 }, /* Madison, WI 447,245 */ + { 40.2752, -76.8843 }, /* Harrisburg, PA 442,289 */ + { 34.7256, -92.3576 }, /* Little Rock, AK 439,815 */ + { 59.4372, 24.7450 }, /* Tallinn, EE 438,341 */ + { -33.9250, 18.4250 }, /* Cape Town, ZA 433,688 */ + { 48.1447, 17.1128 }, /* Bratislava, SK 429,564 */ + { -35.2931, 149.1269 }, /* Canberra, AU 426,704 */ + { -41.2889, 174.7772 }, /* Wellington, NZ 418,500 */ + { 41.3300, 19.8200 }, /* Tirana, AL 418,495 */ + { -6.1835, 35.7460 }, /* Dodoma, TZ 410,956 */ + { 11.8592, -15.5956 }, /* Bissau, GW 395,954 */ + { 43.6007, -116.2312 }, /* Boise, Idaho 389,280 */ + { 4.8500, 31.6000 }, /* Juba, SS 372,410 */ + { -9.4789, 147.1494 }, /* Port Moresby, PG 364,125 */ + { 33.8869, 35.5131 }, /* Beirut, LB 361,366 */ + { 6.8161, -5.2742 }, /* Yamoussoukro, CI 355,573 */ + { -29.3100, 27.4800 }, /* Maseru, LS 330,790 */ + { 35.1725, 33.3650 }, /* Nicosia, CY 330,000 */ + { 32.3163, -90.2124 }, /* Jackson, MS 325,350 */ + { 42.7142, -84.5601 }, /* Lansing, MI 324,286 */ + { -22.5700, 17.0836 }, /* Windhoek, NA 322,500 */ + { 44.9477, -93.1040 }, /* St. Paul, MN 308,096 */ + { 6.4833, 2.6167 }, /* Porto-Novo, BJ 300,000 */ + { -19.0431, -65.2592 }, /* Sucre, BO 300,000 */ + { 40.2236, -74.7641 }, /* Trenton, NJ 290,716 */ + { 40.8090, -96.6788 }, /* Lincoln, NE 289,490 */ + { 9.9333, -84.0833 }, /* San José, CR 288,054 */ + { 46.0500, 14.5167 }, /* Ljubljana, SI 286,745 */ + { 43.8667, 18.4167 }, /* Sarajevo, BA 275,524 */ + { 25.0667, -77.3333 }, /* Nassau, BS 274,400 */ + { 44.9231, -123.0246 }, /* Salem, Oregon 266,804 */ + { 30.4551, -84.2526 }, /* Tallahassee, FL 257,601 */ + { -29.1000, 26.2167 }, /* Bloemfontein, ZA 256,185 */ + { 32.3473, -86.2666 }, /* Montgomery, AL 254,634 */ + { 14.6104, -61.0800 }, /* Fort-de-France, MQ 253,995 */ + { -24.6569, 25.9086 }, /* Gaborone, BW 231,626 */ + { 5.8667, -55.1667 }, /* Paramaribo, SR 223,757 */ + { -8.5586, 125.5736 }, /* Dili, TL 222,323 */ + { 42.6667, 21.1667 }, /* Pristina, XK 204,725 */ + { 47.0417, -122.8959 }, /* Olympia, WA 200,915 */ + { 6.7833, -58.1667 }, /* Georgetown, GY 200,500 */ + { -20.8789, 55.4481 }, /* Saint-Denis, RE 190,047 */ + { 3.7521, 8.7737 }, /* Malabo, GQ 187,302 */ + { 36.1324, -5.3781 }, /* Gibraltar, GI 187,083 */ + { 42.4397, 19.2661 }, /* Podgorica, ME 174,515 */ + { 39.7710, -89.6538 }, /* Springfield, IL 158,509 */ + { 26.2250, 50.5775 }, /* Manama, BH 157,474 */ + { 12.1080, -68.9350 }, /* Willemstad, CW 150,000 */ + { -20.1667, 57.5000 }, /* Port Louis, MU 149,194 */ + { 39.0346, -95.6955 }, /* Topeka, Kansas 147,458 */ + { 28.7000, 77.2000 }, /* New Delhi, IN 142,004 */ + { 38.3484, -81.6323 }, /* Charleston, WV 138,706 */ + { 46.9480, 7.4474 }, /* Bern, CH 133,798 */ + { 4.1750, 73.5083 }, /* Male, MV 133,019 */ + { -17.5334, -149.5667 }, /* Papeete, PF 131,695 */ + { 64.1475, -21.9350 }, /* Reykjavík, IS 128,793 */ + { 14.9177, -23.5092 }, /* Praia, CV 127,832 */ + { 49.6106, 6.1328 }, /* Luxembourg, LU 124,509 */ + { 39.1610, -75.5203 }, /* Dover, DE 117,282 */ + { 6.9000, 79.9164 }, /* Sri Jayewardenepura Kotte, LK 115,826 */ + { -11.7036, 43.2536 }, /* Moroni, KM 111,329 */ + { 35.6619, -105.9819 }, /* Santa Fe, NM 111,269 */ + { 13.0975, -59.6167 }, /* Bridgetown, BB 110,000 */ + { 27.4833, 89.6333 }, /* Thimphu, BT 104,000 */ + { 46.8144, -100.7694 }, /* Bismarck, ND 98,345 */ + { -26.3208, 31.1617 }, /* Mbabane, SZ 94,874 */ + { -22.2625, 166.4443 }, /* Nouméa, NC 93,060 */ + { -18.1333, 178.4333 }, /* Suva, FJ 88,271 */ + { -9.4333, 159.9500 }, /* Honiara, SB 84,520 */ + { 41.1351, -104.7900 }, /* Cheyenne, WY 79,484 */ + { 14.0167, -60.9833 }, /* Castries, LC 70,000 */ + { 4.9330, -52.3300 }, /* Cayenne, GF 61,550 */ + { 39.1512, -119.7474 }, /* Carson City, NV 58,756 */ + { 38.5676, -92.1759 }, /* Jefferson City, MO 58,025 */ + { 0.3333, 6.7333 }, /* São Tomé, ST 56,166 */ + { 46.5965, -112.0202 }, /* Helena, MT 52,936 */ + { 32.2942, -64.7839 }, /* Hamilton, BM 52,320 */ + { -17.7333, 168.3167 }, /* Port-Vila, VU 51,437 */ + { 4.9167, 114.9167 }, /* Bandar Seri Begawan, BN 50,000 */ + { 43.2305, -71.5595 }, /* Concord, NH 43,627 */ + { -3.4264, 29.9306 }, /* Gitega, BI 41,944 */ + { 38.9706, -76.5047 }, /* Annapolis, MD 39,223 */ + { 38.1924, -84.8643 }, /* Frankfort, KY 38,852 */ + { -13.8333, -171.8333 }, /* Apia, WS 37,708 */ + { 10.6667, -61.5167 }, /* Port of Spain, TT 37,074 */ + { 43.7396, 7.4069 }, /* Monaco, MC 36,371 */ + { 47.1415, 9.5215 }, /* Vaduz, LI 36,281 */ + { 54.1500, -4.4819 }, /* Douglas, IM 35,854 */ + { 12.5186, -70.0358 }, /* Oranjestad, AW 34,980 */ + { 49.1833, -2.1167 }, /* Saint Helier, JE 33,522 */ + { -12.7871, 45.2750 }, /* Mamoudzou, YT 32,057 */ + { 58.4546, -134.1739 }, /* Juneau, AK 31,974 */ + { 13.4531, -16.5775 }, /* Banjul, GM 31,356 */ + { 7.0918, 171.3802 }, /* Majuro, MH 30,000 */ + { 1.3382, 173.0176 }, /* Tarawa, KI 28,802 */ + { 19.2866, -81.3744 }, /* George Town, KY 27,704 */ + { -4.6236, 55.4544 }, /* Victoria, SC 26,450 */ + { 13.1667, -61.2333 }, /* Kingstown, VC 25,000 */ + { -21.1347, -175.2083 }, /* Nuku‘alofa, TO 23,221 */ + { 42.5000, 1.5000 }, /* Andorra la Vella, AD 22,151 */ + { 44.3341, -69.7319 }, /* Augusta, Maine 22,116 */ + { 17.1211, -61.8447 }, /* Saint John’s, AG 21,926 */ + { 64.1750, -51.7333 }, /* Nuuk, GL 18,326 */ + { 17.2500, -88.7675 }, /* Belmopan, BZ 17,222 */ + { 15.3000, -61.3833 }, /* Roseau, DM 16,582 */ + { 44.3748, -100.3205 }, /* Pierre, SD 14,659 */ + { 62.0000, -6.7833 }, /* Tórshavn, FO 13,326 */ + { 17.2983, -62.7342 }, /* Basseterre, KN 13,220 */ + { -14.2740, -170.7046 }, /* Pago Pago, AS 12,576 */ + { 44.2658, -72.5717 }, /* Montpelier, VT 7,372 */ + { 35.8978, 14.5125 }, /* Valletta, MT 6,444 */ + { 6.9178, 158.1850 }, /* Palikir, FM 6,227 */ + { -8.5167, 179.2167 }, /* Funafuti, TV 6,025 */ + { 21.4664, -71.1360 }, /* Grand Turk, TC 5,801 */ + { -26.4465, 31.2064 }, /* Lobamba, SZ 5,800 */ + { -21.2070, -159.7710 }, /* Avarua, CK 5,445 */ + { 12.0444, -61.7417 }, /* Saint George’s, GD 4,315 */ + { 43.9320, 12.4484 }, /* San Marino, SM 4,040 */ + { 15.2137, 145.7546 }, /* Capitol Hill, MP 2,500 */ + { -51.7000, -57.8500 }, /* Stanley, FK 2,213 */ + { -19.0560, -169.9210 }, /* Alofi, NU 1,611 */ + { 13.4745, 144.7504 }, /* HagÃ¥tña, GU 1,051 */ + { 41.9000, 12.4478 }, /* Vatican City, VA 825 */ + { -15.9251, -5.7179 }, /* Jamestown, SH 714 */ + diff --git a/hacks/glx/mapscroller.c b/hacks/glx/mapscroller.c new file mode 100644 index 00000000..d0406419 --- /dev/null +++ b/hacks/glx/mapscroller.c @@ -0,0 +1,1460 @@ +/* mapscroller, Copyright © 2021-2022 Jamie Zawinski + * + * 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. No representations are made about the suitability of this + * software for any purpose. It is provided "as is" without express or + * implied warranty. + * + * This displays a slowly-scrolling map of a random place on Earth, using + * data from openstreetmap.org or compatible services. + * + * Network access and management of the image file cache happens in the + * mapscroller.pl helper program, since doing https from C code is untenable. + * Sadly, this division of labor means that this program won't work on iOS or + * Android. + * + * If we wanted to get this working on iOS and Android, it might be easier to + * just rewrite the whole thing as a webview running https://openlayers.org/ - + * it would probably be 50 lines of code. + * + * Created: 14-Dec-2021. + */ + +#define DEFAULTS "*delay: 30000 \n" \ + "*showFPS: False \n" \ + "*wireframe: False \n" \ + "*titleFont: sans-serif 18" "\n" \ + "*loaderProgram: mapscroller.pl" "\n" \ + "*cacheSize: 20MB" "\n" \ + "*texFontOmitDropShadow: True \n" \ + "*suppressRotationAnimation: True \n" \ + +# define release_map 0 +# undef DEBUG_TEXTURE + +#include "xlockmore.h" +#include "ximage-loader.h" +#include "texfont.h" +#include "../images/gen/oceantiles_12_png.h" + +#ifdef USE_GL /* whole file */ + +#ifndef HAVE_COCOA +# include +#endif + +#include +#include +#include +#include +#include +#include + +#define DEF_URL_TEMPLATE "(default)" +#define DEF_MAP_LEVEL "15" +#define DEF_SPEED "1.0" +#define DEF_DURATION "1800" +#define DEF_ORIGIN "random-city" +#define DEF_TITLES "True" +#define DEF_ARROW "True" +#define DEF_VERBOSE "0" + +#define FALLBACK_URL "https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png" +#define TILE_PIXEL_SIZE 256 +#define MIN_LEVEL 5 +#define MAX_LEVEL 18 /* Some servers go to 19, but not all */ + +typedef struct { double lat, lon; } LL; +typedef struct { double x, y; } XY; +typedef struct { long x, y; } XYi; + +static const LL cities[] = { +# include "mapcities.h" +}; + +typedef struct { + int id; + int map_level; + XYi grid; + XYi map; + enum { BLANK, LOADING, OK, FAILED, RETRY } status; + int retries; + GLuint texid; /* Non-zero if we have the texture image data */ + GLfloat opacity; +} tile; + +typedef struct { + GLXContext *glx_context; + char *url_template; + int map_level; + GLfloat speed; + int duration; + LL pos; + XY heading[3]; + double heading_ratio; + int grid_w, grid_h; + tile *tiles; + texture_font_data *font_data; + XImage *oceans; + Bool ocean_p; + + enum { FADE_OUT, RUN } mode; + time_t change_time; + double opacity; + + pid_t pid; + XtInputId pipe_id; + int pipe_in, pipe_out; + Bool input_available_p; + + Bool button_down_p; + LL drag_start_deg; + XYi drag_start_px; + +} map_configuration; + +static map_configuration *bps = NULL; + +static char *url_template_arg; +static int map_level_arg; +static GLfloat speed_arg; +static int duration_arg; +static char *origin_arg; +static Bool do_titles; +static Bool do_arrow; +static int verbose_p; + +static XrmOptionDescRec opts[] = { + { "-url-template", ".urlTemplate", XrmoptionSepArg, 0 }, + { "-level", ".mapLevel", XrmoptionSepArg, 0 }, + { "-speed", ".speed", XrmoptionSepArg, 0 }, + { "-duration", ".duration", XrmoptionSepArg, 0 }, + { "-origin", ".origin", XrmoptionSepArg, 0 }, + { "-titles", ".titles", XrmoptionNoArg, "True" }, + { "+titles", ".titles", XrmoptionNoArg, "False" }, + { "-arrow", ".arrow", XrmoptionNoArg, "True" }, + { "+arrow", ".arrow", XrmoptionNoArg, "False" }, + { "-verbose", ".verbose", XrmoptionNoArg, "1" }, + { "-v", ".verbose", XrmoptionNoArg, "1" }, + { "-vv", ".verbose", XrmoptionNoArg, "2" }, + { "-vvv", ".verbose", XrmoptionNoArg, "3" }, + { "-vvvv", ".verbose", XrmoptionNoArg, "4" }, + { "-vvvvv", ".verbose", XrmoptionNoArg, "5" }, + { "-vvvvvv", ".verbose", XrmoptionNoArg, "6" }, + { "-quiet", ".verbose", XrmoptionNoArg, "0" }, +}; + +static argtype vars[] = { + {&url_template_arg, "urlTemplate", "URLTemplate", DEF_URL_TEMPLATE, t_String}, + {&map_level_arg, "mapLevel", "MapLevel", DEF_MAP_LEVEL, t_Int}, + {&speed_arg, "speed", "Speed", DEF_SPEED, t_Float}, + {&duration_arg, "duration", "Duration", DEF_DURATION, t_Int}, + {&origin_arg, "origin", "Origin", DEF_ORIGIN, t_String}, + {&do_titles, "titles", "Titles", DEF_TITLES, t_Bool}, + {&do_arrow, "arrow", "Arrow", DEF_ARROW, t_Bool}, + {&verbose_p, "verbose", "Verbose", DEF_VERBOSE, t_Int}, +}; + +ENTRYPOINT ModeSpecOpt map_opts = {countof(opts), opts, countof(vars), vars, NULL}; + + +static const char * +blurb (ModeInfo *mi) +{ + static char buf[255]; + time_t now = time ((time_t *) 0); + char *ct = (char *) ctime (&now); + int n = strlen(progname); + if (n > 100) n = 99; + strncpy(buf, progname, n); + buf[n++] = ':'; + buf[n++] = ' '; + strncpy(buf+n, ct+11, 8); + sprintf(buf+n+8, ": %lu", (unsigned long) getpid()); + return buf; +} + + +static int +lon2tilex (double lon, int z) +{ + return (int) (floor ((lon + 180.0) / 360.0 * (1 << z))); +} + +static int +lat2tiley (double lat, int z) +{ + double latrad = lat * M_PI/180.0; + return (int) (floor ((1.0 - asinh(tan(latrad)) / M_PI) / 2.0 * (1 << z))); +} + +static double +tilex2lon (int x, int z) +{ + return (x / (double) (1 << z) * 360.0 - 180); +} + +static double +tiley2lat (int y, int z) +{ + double n = M_PI - 2.0 * M_PI * y / (double) (1 << z); + return (180.0 / M_PI * atan (0.5 * (exp(n) - exp(-n)))); +} + + +static Bool +constrain_mercator (LL *ll) +{ + Bool changed = False; + if (ll->lat >= 85) changed = True, ll->lat = 85; /* Mercator max */ + if (ll->lat <= -85) changed = True, ll->lat = -85; + while (ll->lon > 180) ll->lon -= 180; + while (ll->lon <= -180) ll->lon += 180; + return changed; +} + + +/* oceantiles_12.png contains one 2-bit pixel for each level 12 tile + (4096 x 4096 tiles). The colors mean: + white - coastline intersects with this tile + green - no coastline intersect, land tile + blue - no coastline intersect, sea tile + black - unknown + */ +static Bool +ocean_tile_p (ModeInfo *mi, double lat, double lon) +{ + map_configuration *bp = &bps[MI_SCREEN(mi)]; + int z = 12; + int x = lon2tilex (lon, z); + int y = lat2tiley (lat, z); + unsigned long p = ((x >= 0 && y >= 0 && + x < bp->oceans->width && + y < bp->oceans->height) + ? XGetPixel (bp->oceans, x, bp->oceans->height-y-1) + : 0); + /* #### Why is this ABGR instead of RGBA? */ + return (p == 0xFFFF0000); /* blue */ + return False; +} + + +static Bool +mostly_ocean_p (ModeInfo *mi) +{ + map_configuration *bp = &bps[MI_SCREEN(mi)]; + double deg = 360 / exp2(bp->map_level); + /* Check center and the 8 tiles around it */ + return (ocean_tile_p (mi, bp->pos.lat, bp->pos.lon ) && + ocean_tile_p (mi, bp->pos.lat - deg, bp->pos.lon - deg) && + ocean_tile_p (mi, bp->pos.lat - deg, bp->pos.lon ) && + ocean_tile_p (mi, bp->pos.lat - deg, bp->pos.lon + deg) && + ocean_tile_p (mi, bp->pos.lat, bp->pos.lon - deg) && + ocean_tile_p (mi, bp->pos.lat, bp->pos.lon + deg) && + ocean_tile_p (mi, bp->pos.lat + deg, bp->pos.lon - deg) && + ocean_tile_p (mi, bp->pos.lat + deg, bp->pos.lon ) && + ocean_tile_p (mi, bp->pos.lat + deg, bp->pos.lon + deg)); +} + + +static void +free_tiles (ModeInfo *mi) +{ + map_configuration *bp = &bps[MI_SCREEN(mi)]; + int i; + for (i = 0; i < bp->grid_w * bp->grid_h; i++) + if (bp->tiles[i].texid) + glDeleteTextures (1, &bp->tiles[i].texid); + free (bp->tiles); + bp->tiles = 0; +} + + +/* qsort comparator for sorting tiles from center out */ +static XYi cmp_tiles_ctr; +static int +cmp_tiles (const void *aa, const void *bb) +{ + const tile *a = *(const tile **) aa; + const tile *b = *(const tile **) bb; + long adx = cmp_tiles_ctr.x - a->grid.x; + long ady = cmp_tiles_ctr.y - a->grid.y; + long bdx = cmp_tiles_ctr.x - b->grid.x; + long bdy = cmp_tiles_ctr.y - b->grid.y; + long adist2 = adx*adx + ady*ady; /* No need for sqrt */ + long bdist2 = bdx*bdx + bdy*bdy; + return (int) (adist2 - bdist2); +} + + +static void +reshape_tiles (ModeInfo *mi) +{ + map_configuration *bp = &bps[MI_SCREEN(mi)]; + int tile_w = TILE_PIXEL_SIZE; + int tile_h = TILE_PIXEL_SIZE; + int x, y, i, j; + int ow = bp->grid_w; + int oh = bp->grid_h; + tile *otiles = bp->tiles; + XYi center_tile; + XYi topleft_tile; + long map_w = exp2 (bp->map_level); + long map_h = map_w; + static int tick = 0; + + /* Two tile border around viewport, and round up. */ + int w2 = (MI_WIDTH(mi) / (double) tile_w) + 4 + 0.5; + int h2 = (MI_HEIGHT(mi) / (double) tile_h) + 4 + 0.5; + + center_tile.x = lon2tilex (bp->pos.lon, bp->map_level); + center_tile.y = lat2tiley (bp->pos.lat, bp->map_level); + topleft_tile.x = center_tile.x - w2/2; + topleft_tile.y = center_tile.y - h2/2; + + bp->grid_w = w2; + bp->grid_h = h2; + bp->tiles = (tile *) calloc (w2 * (h2 + 1), sizeof (*bp->tiles)); + + /* Generate blank tiles for our current grid. */ + for (y = 0; y < h2; y++) + for (x = 0; x < w2; x++) + { + tile *t = &bp->tiles[y * w2 + x]; + t->id = -1; + t->map_level = bp->map_level; + t->map.x = topleft_tile.x + x; + t->map.y = topleft_tile.y + y; + t->grid.x = x; + t->grid.y = y; + while (t->map.x < 0) t->map.x += map_w; + while (t->map.y < 0) t->map.y += map_h; + while (t->map.x >= map_w) t->map.x -= map_w; + while (t->map.y >= map_h) t->map.y -= map_h; + } + + + /* If any of the old tiles have the same map coordinates, preserve + their contents (images and textures) */ + for (i = 0; i < ow * oh; i++) + { + for (j = 0; j < w2 * h2; j++) + { + if (otiles[i].id > 0 && + bp->tiles[j].id <= 0 && + otiles[i].map.x == bp->tiles[j].map.x && + otiles[i].map.y == bp->tiles[j].map.y) + { + XYi ogrid = bp->tiles[j].grid; + bp->tiles[j] = otiles[i]; /* copy whole struct */ + otiles[i].id = -1; + otiles[i].texid = 0; + bp->tiles[j].grid = ogrid; + } + } + } + + /* Give IDs to the retained new tiles */ + for (i = 0; i < w2 * h2; i++) + if (bp->tiles[i].id < 0) + bp->tiles[i].id = ++tick; + + /* Queue a loader for any tiles that don't have them. + Enqueue them from the center out, rather than left to right. */ + { + tile **queue = (tile **) malloc (w2 * h2 * sizeof(*queue)); + int count = 0; + for (i = 0; i < w2 * h2; i++) + { + tile *t = &bp->tiles[i]; + if (t->status == BLANK || + (t->status == RETRY && t->retries < 3)) + { + queue[count++] = t; + if (t->status == RETRY) + { + t->retries++; + if (verbose_p) + fprintf (stderr, + "%s: retrying tile: %ld %ld %d (%d) pos: %.4f, %.4f\n", + blurb(mi), t->map.x, t->map.y, t->map_level, + t->retries, + tiley2lat (t->map.y, t->map_level), + tilex2lon (t->map.x, t->map_level)); + } + } + } + + cmp_tiles_ctr.x = bp->grid_w / 2; /* Because qsort_r is not portable */ + cmp_tiles_ctr.y = bp->grid_h / 2; + qsort (queue, count, sizeof(*queue), cmp_tiles); + + for (i = 0; i < count; i++) + { + tile *t = queue[i]; + int L; + char buf[1024]; + t->status = LOADING; + sprintf (buf, "%ld %ld %d\n", t->map.x, t->map.y, t->map_level); + L = strlen (buf); + if (L != write (bp->pipe_out, buf, L)) + { + sprintf (buf, "%.100s: write", blurb(mi)); + perror (buf); + exit (1); + } + if (verbose_p > 1) + fprintf (stderr, "%s: requesting tile %s", blurb(mi), buf); + } + free (queue); + } + + /* Free textures of any now-unused tiles. */ + for (i = 0; i < ow * oh; i++) + if (otiles[i].texid) + glDeleteTextures (1, &otiles[i].texid); + + free (otiles); +} + + +static void +draw_tile (ModeInfo *mi, tile *t) +{ + map_configuration *bp = &bps[MI_SCREEN(mi)]; + int wire = MI_IS_WIREFRAME(mi); + double w = TILE_PIXEL_SIZE; + + if (t->texid) mi->polygon_count++; + + if (! wire) + { + if (t->texid && t->status != OK) abort(); + if (!t->texid && t->status == OK) abort(); + + glBindTexture (GL_TEXTURE_2D, t->texid); + + /* Must be after glBindTexture */ + glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + } + + if (wire) + glColor3f (0, 1, 0); + else if (!t->texid) + glColor4f (0, 0, 0, 0.03 * bp->opacity); /* grid color */ + else + { + glColor4f (1, 1, 1, t->opacity * bp->opacity); + t->opacity += 0.1; + if (t->opacity > 1) t->opacity = 1; + } + + glFrontFace (GL_CCW); + glBegin (wire || !t->texid ? GL_LINE_LOOP : GL_QUADS); + glTexCoord2f (0, 0); glVertex3f (0, 0, 0); + glTexCoord2f (1, 0); glVertex3f (w, 0, 0); + glTexCoord2f (1, 1); glVertex3f (w, w, 0); + glTexCoord2f (0, 1); glVertex3f (0, w, 0); + glEnd(); + + if (t->status == FAILED || t->status == RETRY) /* X them out */ + { + GLfloat s = 0.15; + if (!wire) + { + glDisable (GL_TEXTURE_2D); + glColor4f (0, 0, 0, 0.2 * bp->opacity); /* line color */ + } + glPushMatrix(); + glTranslatef (w/2, w/2, 0); + glScalef (s, s, s); + glTranslatef (-w/2, -w/2, 0); + glBegin (GL_LINES); + glVertex3f (0, 0, 0); glVertex3f (w, w, 0); + glVertex3f (w, 0, 0); glVertex3f (0, w, 0); + glEnd(); + glPopMatrix(); + if (!wire) + glEnable (GL_TEXTURE_2D); + } + + if (wire) + { + char buf[1024]; + XCharStruct c; + int ascent, descent; + + if (! t->texid) + { + glColor3f (0, 0.5, 0); + glBegin (GL_LINES); + glVertex3f (0, 0, 0); + glVertex3f (w, w, 0); + glVertex3f (w, 0, 0); + glVertex3f (0, w, 0); + glEnd(); + } + + sprintf (buf, + "%ld x %ld @ %d\n" + "%.3f\xC2\xB0, %.3f\xC2\xB0\n\n" + "%d", + t->map.x, t->map.y, t->map_level, + tiley2lat (t->map.y, t->map_level), + tilex2lon (t->map.x, t->map_level), + t->id); + texture_string_metrics (bp->font_data, buf, &c, &ascent, &descent); + glPushMatrix(); + glTranslatef (ascent / 2, w - (ascent + descent), 0); + glColor3f (1, 1, 0); + print_texture_string (bp->font_data, buf); + glPopMatrix(); + } +} + + +static void +draw_tiles (ModeInfo *mi) +{ + map_configuration *bp = &bps[MI_SCREEN(mi)]; + int x, y; + + /* Grid has enough cells to cover the screen plus a 2 tile border. + We want 'pos' at the center of the screen, which means its tile + will contain the center point. + */ + XY pos0; + LL tile0, tile1; + XY off; + + /* What tile contains pos? */ + pos0.x = lon2tilex (bp->pos.lon, bp->map_level); + pos0.y = lat2tiley (bp->pos.lat, bp->map_level); + + /* What is that tile's origin and extent? */ + tile0.lon = tilex2lon (pos0.x, bp->map_level); + tile0.lat = tiley2lat (pos0.y, bp->map_level); + tile1.lon = tilex2lon (pos0.x+1, bp->map_level); + tile1.lat = tiley2lat (pos0.y+1, bp->map_level); + + /* How far should the tile be scrolled? */ + off.x = (bp->pos.lon - tile0.lon) / (tile1.lon - tile0.lon); + off.y = -(bp->pos.lat - tile0.lat) / (tile1.lat - tile0.lat); + off.x *= TILE_PIXEL_SIZE; + off.y *= TILE_PIXEL_SIZE; + + /* And center */ + off.x += bp->grid_w / 2.0 * TILE_PIXEL_SIZE - TILE_PIXEL_SIZE/2; + off.y -= bp->grid_h / 2.0 * TILE_PIXEL_SIZE - TILE_PIXEL_SIZE/2; + + glPushMatrix(); + glScalef (1.0 / MI_WIDTH(mi), + 1.0 / MI_HEIGHT(mi), + 1); + + for (y = 0; y < bp->grid_h; y++) + for (x = 0; x < bp->grid_w; x++) + { + glPushMatrix(); + glTranslatef (-bp->grid_w / 2.0 - off.x + (x * TILE_PIXEL_SIZE), + -bp->grid_h / 2.0 - off.y - (y * TILE_PIXEL_SIZE) + - TILE_PIXEL_SIZE, + 0); + draw_tile (mi, &bp->tiles[y * bp->grid_w + x]); + glPopMatrix(); + } + + glPopMatrix(); +} + + +static void +draw_arrow (ModeInfo *mi) +{ + map_configuration *bp = &bps[MI_SCREEN(mi)]; + GLfloat s = 0.02; + + glPushMatrix(); + glScalef (s, s, s); + glScalef (MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi), 1, 1); + glRotatef (-atan2 (bp->heading[2].x, bp->heading[2].y) * (180 / M_PI), + 0, 0, 1); + + glFrontFace (GL_CW); + glDisable (GL_TEXTURE_2D); + glColor3f (1, 1, 0); + glBegin (GL_TRIANGLE_FAN); + glVertex3f (0, -0.25, 0); + glVertex3f (-0.5, -1, 0); + glVertex3f (0, 1, 0); + glVertex3f (0.5, -1, 0); + glEnd(); + + glColor3f (0, 0, 0); + glLineWidth (MI_WIDTH(mi) >= 1280 || MI_HEIGHT(mi) >= 1280 ? 2 : 1); + glBegin (GL_LINE_LOOP); + glVertex3f (0, -0.25, 0); + glVertex3f (-0.5, -1, 0); + glVertex3f (0, 1, 0); + glVertex3f (0.5, -1, 0); + glEnd(); + + glPopMatrix(); +} + + +static const char * +heading_str (ModeInfo *mi) +{ + map_configuration *bp = &bps[MI_SCREEN(mi)]; + double deg = atan2 (bp->heading[1].x, bp->heading[1].y) * (180 / M_PI); +# if 0 + const char *dirs[] = { "N", "NNE", "NE", "ENE", + "E", "ESE", "SE", "SSE", + "S", "SSW", "SW", "WSW", + "W", "WNW", "NW", "NNW" }; +# else + const char *dirs[] = {"N", "NbE", "NNE", "NEbN", "NE", "NEbE", "ENE", "EbN", + "E", "EbS", "ESE", "SEbE", "SE", "SEbS", "SSE", "SbE", + "S", "SbW", "SSW", "SWbS", "SW", "SWbW", "WSW", "WbS", + "W", "WbN", "WNW", "NWbW", "NW", "NWbN", "NNW", "NbW"}; +# endif + double step = 360 / countof(dirs); + while (deg < 0) deg += 360; + return dirs[((int) ((deg + step/2) / step)) % countof(dirs)]; +} + + +static void +loader_cb (XtPointer closure, int *source, XtInputId *id) +{ + ModeInfo *mi = (ModeInfo *) closure; + map_configuration *bp = &bps[MI_SCREEN(mi)]; + /* Handle it back in the 'draw' function, since we need a GL context. */ + bp->input_available_p = True; +} + + +/* Launch the Perl helper program in another process, at the end of a + bidirectional pipe. + */ +static void +fork_loader (ModeInfo *mi) +{ + map_configuration *bp = &bps[MI_SCREEN(mi)]; + pid_t forked; + char buf[1024]; + char *av[20]; + int fd1[2], fd2[2]; + int ac = 0; + + av[ac++] = get_string_resource (mi->dpy, "loaderProgram", "Program"); + if (verbose_p == 1) av[ac++] = "-v"; + if (verbose_p == 2) av[ac++] = "-vv"; + else if (verbose_p == 3) av[ac++] = "-vvv"; + else if (verbose_p == 4) av[ac++] = "-vvvv"; + else if (verbose_p == 5) av[ac++] = "-vvvvv"; + else if (verbose_p >= 6) av[ac++] = "-vvvvvv"; + av[ac++] = "--url-template"; + av[ac++] = bp->url_template; + av[ac++] = "--cache-size"; + av[ac++] = get_string_resource (mi->dpy, "cacheSize", "CacheSize"); + av[ac] = 0; + + if (pipe (fd1)) + { + sprintf (buf, "%.100s: error creating pipe", blurb(mi)); + perror (buf); + exit (1); + } + + if (pipe (fd2)) + { + sprintf (buf, "%.100s: error creating pipe", blurb(mi)); + perror (buf); + exit (1); + } + + forked = fork(); + switch ((int) forked) + { + case -1: + { + sprintf (buf, "%.100s: couldn't fork", blurb(mi)); + perror (buf); + exit (1); + break; + } + case 0: + { +# ifndef HAVE_COCOA + close (ConnectionNumber (mi->dpy)); +# endif + close (fd1[1]); + close (fd2[0]); + + if (dup2 (fd1[0], STDIN_FILENO) < 0) /* pipe stdin */ + { + sprintf (buf, "%s.100: could not dup() a new stdin:", blurb(mi)); + perror (buf); + return; + } + + if (dup2 (fd2[1], STDOUT_FILENO) < 0) /* pipe stdout */ + { + sprintf (buf, "%s.100: could not dup() a new stdout", blurb(mi)); + perror (buf); + return; + } + + execvp (av[0], av); /* shouldn't return. */ + sprintf (buf, "%.100s: running %.100s", blurb(mi), av[0]); + perror (buf); + exit (1); + break; + } + default: + { + close (fd1[0]); + close (fd2[1]); + bp->pid = forked; + bp->pipe_id = + XtAppAddInput (XtDisplayToApplicationContext (mi->dpy), + fd2[0], + (XtPointer) (XtInputReadMask | XtInputExceptMask), + loader_cb, (XtPointer) mi); + bp->pipe_out = fd1[1]; + bp->pipe_in = fd2[0]; + break; + } + } +} + + +/* Process a single line from the Perl helper program. + */ +static void +read_loader (ModeInfo *mi) +{ + map_configuration *bp = &bps[MI_SCREEN(mi)]; + char buf[4096]; + int L = 0; + bp->input_available_p = False; + + /* Read a single line -- the file name. + If there is more data available, leave it there; select will fire again. + */ + while (1) + { + unsigned char s[2]; + int n = read (bp->pipe_in, (void *) s, 1); + if (n > 0) + { + if (*s && *s != '\n') + { + if (L >= sizeof(buf)-1) + abort(); + buf[L++] = *s; + } + else + { + buf[L] = 0; + break; + } + } + else if (n == 0) + { + fprintf (stderr, "%s: subprocess died\n", blurb(mi)); + exit (1); + } + else + { + sprintf (buf, "%.100s: read", blurb(mi)); + perror (buf); + exit (1); + } + } + + /* Line looks like "x y z \t FILE" + Find the tile it corresponds to and texturize it. */ + { + int i; + long x, y, z; + char *coords, *file; + char *s = strchr (buf, '\t'); + Bool matched_p = False; + if (!s) abort(); + coords = buf; + *s = 0; + file = s+1; + if (3 != sscanf (coords, " %ld %ld %ld ", &x, &y, &z)) + abort(); + + for (i = 0; i < bp->grid_w * bp->grid_h; i++) + { + tile *t = &bp->tiles[i]; + if (t->map.x == x && + t->map.y == y && + t->map_level == z && + !t->texid) + { + char buf2[1024]; + XImage *image; + struct stat st; + matched_p = True; + + if (strlen(file) == 3) /* HTTP error code */ + { + /* 504 timeout error code: retry; all others: don't. + The perl script returns 504 if and only if it did not + get a response. All other codes are from the server. + */ + t->status = (!strcmp (file, "504") ? RETRY : FAILED); + if (verbose_p) + fprintf (stderr, "%s: error %s: tile: %s pos: %.4f, %.4f\n", + blurb(mi), file, buf, + tiley2lat (y, z), tilex2lon (x, z)); + break; + } + + if (stat (file, &st)) + { + /* This can happen if mapscroller.pl has a file cached but + the cache was cleared by another copy running on another + screen. */ + if (verbose_p) + fprintf (stderr, "%s: file does not exist: %s\n", + blurb(mi), file); + t->status = RETRY; + break; + } + + image = file_to_ximage (MI_DISPLAY(mi), MI_VISUAL(mi), file); + if (!image) + { + if (verbose_p) + fprintf (stderr, "%s: file unloadable: %s\n", + blurb(mi), file); + t->status = RETRY; + break; + } + + t->status = OK; + if (t->texid) abort(); + glGenTextures (1, &t->texid); + if (!t->texid) abort(); + glBindTexture (GL_TEXTURE_2D, t->texid); + + clear_gl_error(); + glPixelStorei (GL_UNPACK_ALIGNMENT, 4); + glPixelStorei (GL_UNPACK_ROW_LENGTH, image->width); + glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, + image->width, image->height, 0, + GL_RGBA, GL_UNSIGNED_BYTE, image->data); + sprintf (buf2, "texture %d: %.100s (%dx%d)", t->texid, + file, image->width, image->height); + check_gl_error (buf2); + XDestroyImage (image); + if (verbose_p > 3) + fprintf (stderr, "%s: %s\n", blurb(mi), buf2); + else if (verbose_p > 1) + fprintf (stderr, "%s: got tile %ld %ld %ld\n", blurb(mi), + x, y, z); + } + } + + if (verbose_p > 2 && !matched_p) + fprintf (stderr, "%s: got unmatched tile %ld %ld %ld\n", blurb(mi), + x, y, z); + + + } +} + + +/* Window management, etc + */ +ENTRYPOINT void +reshape_map (ModeInfo *mi, int width, int height) +{ + GLfloat s = 2; + + glViewport (0, 0, width, height); + glMatrixMode (GL_PROJECTION); + glLoadIdentity(); + glMatrixMode (GL_MODELVIEW); + glLoadIdentity(); + + /* if (MI_IS_WIREFRAME(mi)) s *= 0.35; */ + glScalef (s, s, s); + glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + reshape_tiles (mi); +} + + +ENTRYPOINT Bool +map_handle_event (ModeInfo *mi, XEvent *event) +{ + map_configuration *bp = &bps[MI_SCREEN(mi)]; + if (event->xany.type == ButtonPress) + { + bp->button_down_p++; + + if (event->xbutton.button == Button4) + { + WHEEL_UP: + bp->map_level++; + if (bp->map_level > MAX_LEVEL) + { + bp->map_level = MAX_LEVEL; + return False; + } + if (verbose_p) + fprintf (stderr, "%s: level %d\n", blurb(mi), bp->map_level); + } + else if (event->xbutton.button == Button5) + { + WHEEL_DOWN: + bp->map_level--; + if (bp->map_level < MIN_LEVEL) + { + bp->map_level = MIN_LEVEL; + return False; + } + if (verbose_p) + fprintf (stderr, "%s: level %d\n", blurb(mi), bp->map_level); + } + + bp->drag_start_deg = bp->pos; + bp->drag_start_px.x = event->xbutton.x; + bp->drag_start_px.y = event->xbutton.y; + return True; + } + else if (event->xany.type == ButtonRelease && bp->button_down_p) + { + bp->button_down_p--; + + if (! bp->button_down_p && event->xbutton.button == Button1) + { + bp->heading[0] = bp->heading[2]; + bp->heading[1] = bp->heading[2]; + bp->heading[1].x = (event->xbutton.x - MI_WIDTH(mi)/2); + bp->heading[1].y = -(event->xbutton.y - MI_HEIGHT(mi)/2); + bp->heading_ratio = 0; + if (verbose_p) + fprintf (stderr, "%s: click heading %s\n", blurb(mi), + heading_str(mi)); + } + + return True; + } + else if (event->xany.type == MotionNotify && bp->button_down_p) + { + /* Size in vertical degrees decreases toward the poles, so the easiest + way to find that is to just examine one of the current tiles. */ + double tile_degrees_x = 360 / exp2(bp->map_level); + double tile_degrees_y = + (tiley2lat (bp->tiles[0].map.y, bp->map_level) - + tiley2lat (bp->tiles[bp->grid_w].map.y, bp->map_level)); + double degrees_per_pixel_x = tile_degrees_x / TILE_PIXEL_SIZE; + double degrees_per_pixel_y = tile_degrees_y / TILE_PIXEL_SIZE; + int dx = event->xmotion.x - bp->drag_start_px.x; + int dy = event->xmotion.y - bp->drag_start_px.y; + bp->pos.lat = bp->drag_start_deg.lat + dy * degrees_per_pixel_y; + bp->pos.lon = bp->drag_start_deg.lon - dx * degrees_per_pixel_x; + constrain_mercator (&bp->pos); + } + else if (event->xany.type == KeyPress) + { + KeySym keysym; + char c = 0; + XLookupString (&event->xkey, &c, 1, &keysym, 0); + + if (keysym == XK_Prior) + goto WHEEL_UP; + else if (keysym == XK_Next) + goto WHEEL_DOWN; + else if (keysym == XK_Up || c == '=' || c == '+') + { + bp->heading[0] = bp->heading[2]; + bp->heading[1] = bp->heading[2]; + bp->heading[1].x = 0; + bp->heading[1].y = 1; + bp->heading_ratio = 0; + if (verbose_p) + fprintf (stderr, "%s: new heading %s\n", blurb(mi), + heading_str(mi)); + return True; + } + else if (keysym == XK_Down || c == '-' || c == '_') + { + bp->heading[0] = bp->heading[2]; + bp->heading[1] = bp->heading[2]; + bp->heading[1].x = 0; + bp->heading[1].y = -1; + bp->heading_ratio = 0; + if (verbose_p) + fprintf (stderr, "%s: new heading %s\n", blurb(mi), + heading_str(mi)); + return True; + } + else if (keysym == XK_Left || c == ',' || c == '<') + { + bp->heading[0] = bp->heading[2]; + bp->heading[1] = bp->heading[2]; + bp->heading[1].x = -1; + bp->heading[1].y = 0; + bp->heading_ratio = 0; + if (verbose_p) + fprintf (stderr, "%s: new heading %s\n", blurb(mi), + heading_str(mi)); + return True; + } + else if (keysym == XK_Right || c == '.' || c == '>') + { + bp->heading[0] = bp->heading[2]; + bp->heading[1] = bp->heading[2]; + bp->heading[1].x = 1; + bp->heading[1].y = 0; + bp->heading_ratio = 0; + if (verbose_p) + fprintf (stderr, "%s: new heading %s\n", blurb(mi), + heading_str(mi)); + return True; + } + else if (c == ' ') + { + bp->heading[0] = bp->heading[2]; + bp->heading[1] = bp->heading[2]; + bp->heading[1].x = frand(2)-1; + bp->heading[1].y = frand(2)-1; + bp->heading_ratio = 0; + if (verbose_p) + fprintf (stderr, "%s: new random heading %s\n", blurb(mi), + heading_str(mi)); + return True; + } + } + + return False; +} + + +static void +randomize_position (ModeInfo *mi) +{ + map_configuration *bp = &bps[MI_SCREEN(mi)]; + Bool city_p = !strcasecmp (origin_arg, "random-city"); + LL pos; + int i; + for (i = 0; i < 1000; i++) /* Don't get stuck */ + { + if (city_p) + { + if (i == 0) + pos = cities[random() % countof(cities)]; /* Random city center */ + /* Offset by a few miles, but not into the ocean */ + bp->pos.lat = pos.lat + frand(0.05) - 0.025; + bp->pos.lon = pos.lon + frand(0.05) - 0.025; + } + else + { + bp->pos.lat = frand (180) - 90; + bp->pos.lon = frand (360) - 180; + } + constrain_mercator (&bp->pos); + bp->ocean_p = mostly_ocean_p (mi); + if (! bp->ocean_p) + break; + } +} + + +ENTRYPOINT void +init_map (ModeInfo *mi) +{ + map_configuration *bp; + + MI_INIT (mi, bps); + bp = &bps[MI_SCREEN(mi)]; + + bp->glx_context = init_GL(mi); + + bp->font_data = load_texture_font (mi->dpy, "titleFont"); + + bp->url_template = url_template_arg; + if (!bp->url_template || + !*bp->url_template || + *bp->url_template == '(') + bp->url_template = FALLBACK_URL; + + bp->map_level = map_level_arg; + if (bp->map_level <= MIN_LEVEL) bp->map_level = MIN_LEVEL; + if (bp->map_level >= MAX_LEVEL) bp->map_level = MAX_LEVEL; + + bp->speed = speed_arg; + if (bp->speed < 0.001) bp->speed = 0.001; + if (bp->speed > 10) bp->speed = 10; + + bp->duration = duration_arg; + if (bp->duration < 30) bp->duration = 30; + bp->duration *= 1 + frand(0.2); /* Keep multiple instances out of sync */ + + bp->oceans = image_data_to_ximage (MI_DISPLAY (mi), MI_VISUAL (mi), + oceantiles_12_png, + sizeof (oceantiles_12_png)); + if (! bp->oceans) abort(); + + { + float lat = 0, lon = 0; + if (!origin_arg || !*origin_arg) + origin_arg = "random-city"; + + if (2 == sscanf (origin_arg, " %f , %f ", &lat, &lon) || + 2 == sscanf (origin_arg, " %f ; %f ", &lat, &lon) || + 2 == sscanf (origin_arg, " %f / %f ", &lat, &lon) || + 2 == sscanf (origin_arg, " %f %f ", &lat, &lon)) + { + bp->pos.lat = lat; + bp->pos.lon = lon; + constrain_mercator (&bp->pos); + } + else + { + if (strcasecmp (origin_arg, "random") && + strcasecmp (origin_arg, "random-city")) + { + fprintf (stderr, "%s: unparsable origin: \"%s\"\n", + blurb(mi), origin_arg); + origin_arg = "random-city"; + } + randomize_position (mi); + } + } + + bp->heading[0].x = frand(2)-1; + bp->heading[0].y = frand(2)-1; + bp->heading[1] = bp->heading[0]; + bp->heading[2] = bp->heading[0]; + bp->heading_ratio = 1; + + bp->mode = RUN; + bp->opacity = 1; + bp->change_time = time ((time_t *) 0); + + fork_loader (mi); + reshape_map (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); +} + + +static GLfloat +ease_fn (GLfloat r) +{ + return cos ((r/2 + 1) * M_PI) + 1; /* Smooth curve up, end at slope 1. */ +} + + +static GLfloat +ease_ratio (GLfloat r) +{ + GLfloat ease = 0.5; + if (r <= 0) return 0; + else if (r >= 1) return 1; + else if (r <= ease) return ease * ease_fn (r / ease); + else if (r > 1-ease) return 1 - ease * ease_fn ((1 - r) / ease); + else return r; +} + + +ENTRYPOINT void +draw_map (ModeInfo *mi) +{ + map_configuration *bp = &bps[MI_SCREEN(mi)]; + Display *dpy = MI_DISPLAY(mi); + Window window = MI_WINDOW(mi); + + if (!bp->glx_context) + return; + + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + + glShadeModel (GL_SMOOTH); + glDisable (GL_DEPTH_TEST); + glEnable (GL_NORMALIZE); + glEnable (GL_CULL_FACE); + glDisable (GL_LIGHTING); + glEnable (GL_BLEND); + glEnable (GL_LINE_SMOOTH); + + glClearColor (0xF2/255.0, 0xEF/255.0, 0xE9/255.0, 1); /* #F2EFE9 */ + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + mi->polygon_count = 0; /* This counts loaded tiles, not polygons */ + mi->recursion_depth = bp->map_level; + + if (bp->mode == RUN && !bp->button_down_p) + { + Bool force_change_p; + double tile_degrees = 360 / exp2(bp->map_level); + double degrees_per_pixel = tile_degrees / TILE_PIXEL_SIZE; + int i, loaded_count = 0, failed_count = 0; + double loaded_ratio, failed_ratio; + Bool all_failed_p; + + double dx = bp->heading[2].x; + double dy = bp->heading[2].y; + double d = sqrt (dx*dx + dy*dy); + + dx /= d; /* normalize */ + dy /= d; + + /* Scroll more slowly when not all the tiles are loaded. */ + for (i = 0; i < bp->grid_w * bp->grid_h; i++) + { + tile *t = &bp->tiles[i]; + if (t->status != LOADING) + loaded_count++; + if (t->status == FAILED) + failed_count++; + } + loaded_ratio = loaded_count / (double) (bp->grid_w * bp->grid_h); + failed_ratio = failed_count / (double) (bp->grid_w * bp->grid_h); + if (loaded_ratio < 0.1) loaded_ratio = 0.1; + + bp->pos.lon += dx * bp->speed * degrees_per_pixel * 0.3 * loaded_ratio; + bp->pos.lat += dy * bp->speed * degrees_per_pixel * 0.3 * loaded_ratio; + force_change_p = constrain_mercator (&bp->pos); + + /* There goes the neighborhood. If we're getting a lot of 404s, move. */ + if (failed_ratio > 0.8) + { + all_failed_p = True; + force_change_p = True; + } + + if (!force_change_p && !(bp->heading_ratio < 1)) + { + Bool was_ocean_p = bp->ocean_p; + bp->ocean_p = (was_ocean_p + /* Be more strict on "land ho" */ + ? ocean_tile_p (mi, bp->pos.lat, bp->pos.lon) + : mostly_ocean_p (mi)); + + /* If we have just landed in the ocean, reverse gears and + move in the opposite direction until we're out. */ + if (!was_ocean_p && bp->ocean_p) + { + bp->heading[0] = bp->heading[2]; + bp->heading[1] = bp->heading[2]; + bp->heading[1].x = -bp->heading[1].x; + bp->heading[1].y = -bp->heading[1].y; + bp->heading_ratio = 0; + if (verbose_p) + fprintf (stderr, "%s: out to sea: new heading %s\n", + blurb(mi), heading_str(mi)); + } + else if (was_ocean_p && !bp->ocean_p && verbose_p) + fprintf (stderr, "%s: land ho\n", blurb(mi)); + } + + if (!strcasecmp (origin_arg, "random") || + !strcasecmp (origin_arg, "random-city")) + { + time_t now = time ((time_t *) 0); + if (force_change_p || + (bp->mode == RUN && + now > bp->change_time + bp->duration)) + { + bp->mode = FADE_OUT; + force_change_p = False; + if (verbose_p) + fprintf (stderr, "%s: new %s%s, was %.4f, %.4f\n", blurb(mi), + (!strcasecmp (origin_arg, "random-city") + ? "city" : "position"), + (all_failed_p ? " (all tiles failed)" : + bp->ocean_p ? " (ocean)" : ""), + bp->pos.lat, bp->pos.lon); + } + } + + if (force_change_p || + (bp->mode == RUN && + !bp->ocean_p && + bp->heading_ratio >= 1 && + !(random() % 1000))) + { + dx = frand(2)-1; + dy = frand(2)-1; + d = sqrt (dx*dx + dy*dy); + dx /= d; /* normalize */ + dy /= d; + bp->heading[0] = bp->heading[2]; + bp->heading[1].x = dx; + bp->heading[1].y = dy; + bp->heading_ratio = 0; + if (verbose_p) + fprintf (stderr, "%s: new heading %s\n", blurb(mi), + heading_str(mi)); + } + + if (bp->heading_ratio < 1) + { + double th0, th1, th2; + bp->heading_ratio += 0.003; + if (bp->heading_ratio > 1) + bp->heading_ratio = 1; + + th0 = atan2 (bp->heading[0].x, bp->heading[0].y); + th1 = atan2 (bp->heading[1].x, bp->heading[1].y); + while (th0 < 0) th0 += M_PI*2; + while (th1 < 0) th1 += M_PI*2; + if (th1 - th0 > M_PI || th1 - th0 <= -M_PI) + { + if (th1 < th0) + th1 += M_PI*2; + else + th0 += M_PI*2; + } + + th2 = th0 + (th1 - th0) * ease_ratio (bp->heading_ratio); + bp->heading[2].x = sin (th2); + bp->heading[2].y = cos (th2); + } + } + + if (bp->mode == FADE_OUT) + { + bp->opacity -= 0.02; + if (bp->opacity < 0) + { + bp->opacity = 1; + bp->mode = RUN; + bp->change_time = time ((time_t *) 0); + randomize_position (mi); + if (verbose_p) + fprintf (stderr, "%s: new position %.4f, %.4f%s\n", blurb(mi), + bp->pos.lat, bp->pos.lon, + (bp->ocean_p ? " (ocean)" : "")); + } + } + + if (bp->input_available_p) + read_loader (mi); + + if (!MI_IS_WIREFRAME(mi)) + glEnable (GL_TEXTURE_2D); + + if (bp->mode == RUN) + reshape_tiles (mi); + draw_tiles (mi); + if (do_arrow) + draw_arrow (mi); + + if (do_titles && bp->mode == RUN) + { + char buf[1024]; +# if 0 + /* 37.771°, -122.412° */ + sprintf (buf, "%.3f\xC2\xB0, %.3f\xC2\xB0", bp->pos.lat, bp->pos.lon); +# elif 0 + /* 37° 46' 15.63" N, 122° 24' 45.70" W */ + /* This screws up the label image. Some kind of bug in texfont.c? + But only on X11, not Cocoa. */ + double alat = bp->pos.lat >= 0 ? bp->pos.lat : -bp->pos.lat; + double alon = bp->pos.lon >= 0 ? bp->pos.lon : -bp->pos.lon; + sprintf (buf, + "%.0f\xC2\xB0 %.0f' %.2f\" %c, " + "%.0f\xC2\xB0 %.0f' %.2f\" %c", + alat, + (alat - (int) alat) * 60, + ((alat * 60) - (int) (alat * 60)) * 60, + (bp->pos.lat >= 0 ? 'N' : 'S'), + alon, + (alon - (int) alon) * 60, + ((alon * 60) - (int) (alon * 60)) * 60, + (bp->pos.lat >= 0 ? 'E' : 'W')); +# else + /* 37° 46' N, 122° 24' W */ + double alat = bp->pos.lat >= 0 ? bp->pos.lat : -bp->pos.lat; + double alon = bp->pos.lon >= 0 ? bp->pos.lon : -bp->pos.lon; + sprintf (buf, + "%.0f\xC2\xB0 %.0f' %c, " + "%.0f\xC2\xB0 %.0f' %c", + alat, + (alat - (int) alat) * 60, + (bp->pos.lat >= 0 ? 'N' : 'S'), + alon, + (alon - (int) alon) * 60, + (bp->pos.lat >= 0 ? 'E' : 'W')); +# endif + glColor3f (0.3, 0.3, 0.3); + print_texture_label (mi->dpy, bp->font_data, + MI_WIDTH(mi), MI_HEIGHT(mi), 1, buf); + } + + if (mi->fps_p) + { + if (!MI_IS_WIREFRAME(mi)) + { + /* Put a gray box behind the FPS text, but on top of the map. */ + glPushMatrix(); + glTranslatef (-0.5, -0.5, 0); + glScalef (1.0 / MI_WIDTH(mi), + 1.0 / MI_HEIGHT(mi), + 1); + glScalef (220, 150, 1); + glDisable (GL_TEXTURE_2D); + glColor4f (0, 0, 0, 0.4); + glBegin(GL_QUADS); + glVertex3f(0, 0, 0); + glVertex3f(0, 1, 0); + glVertex3f(1, 1, 0); + glVertex3f(1, 0, 0); + glEnd(); + glPopMatrix(); + } + do_fps (mi); + } + glFinish(); + + glXSwapBuffers(dpy, window); +} + + +ENTRYPOINT void +free_map (ModeInfo *mi) +{ + map_configuration *bp = &bps[MI_SCREEN(mi)]; + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + if (bp->font_data) + free_texture_font (bp->font_data); + if (bp->tiles) + free_tiles (mi); + if (bp->oceans) + XDestroyImage (bp->oceans); + + close (bp->pipe_in); + close (bp->pipe_out); + + if (bp->pid && !kill (bp->pid, SIGTERM)) + { + int status; + waitpid (bp->pid, &status, 0); + } + + if (bp->pipe_id) + XtRemoveInput (bp->pipe_id); +} + +XSCREENSAVER_MODULE_2 ("MapScroller", mapscroller, map) + +#endif /* USE_GL */ diff --git a/hacks/glx/mapscroller.man b/hacks/glx/mapscroller.man new file mode 100644 index 00000000..107b0d91 --- /dev/null +++ b/hacks/glx/mapscroller.man @@ -0,0 +1,117 @@ +.TH XScreenSaver 1 "" "X Version 11" +.SH NAME +mapscroller \- a slowly-scrolling map of a random place on Earth. +.SH SYNOPSIS +.B mapscroller +[\-display \fIhost:display.screen\fP] +[\-visual \fIvisual\fP] +[\-window] +[\-root] +[\-delay \fInumber\fP] +[\-speed \fInumber\fP] +[\-duration \fIseconds\fP] +[\-map\-level \fInumber\fP] +[\-url-template URL] +[\-origin LAT/LON] +[\-no-titles] +[\-no-arrow] +[\-fps] +.SH DESCRIPTION +A slowly-scrolling map of a random place on Earth. The map images are loaded +from openstreetmap.org, or any compatible service. + +The Earth is very big, and full of Things. + +As you ponder these maps, remember that traffic always expands to fill all +available lanes, every car is a policy failure, and the concept of +"jaywalking" was invented for profit by auto industry lobbyists in the 1920s. +.SH OPTIONS +.TP 8 +.B \-visual \fIvisual\fP +Specify which visual to use. Legal values are the name of a visual class, +or the id number (decimal or hex) of a specific visual. +.TP 8 +.B \-window +Draw on a newly-created window. This is the default. +.TP 8 +.B \-root +Draw on the root window. +.TP 8 +.B \-delay \fInumber\fP +Per-frame delay, in microseconds. Default: 30000 (0.03 seconds). +.TP 8 +.B \-speed \fInumber\fP +Scrolling speed. 2.0 means twice as fast, 0.5 means half as fast. +.TP 8 +.B \-duration \fIseconds\fP +When in one of the random modes, re-select the map position every +N seconds. Default 20 minutes. +.TP 8 +.B \-map\-level \fInumber\fP +Larger numbers are zoomed in more. 5 - 18, default 15. +.TP 8 +.B \-url-template \fIURL\fP +The map tile server to use. Default: Open Street Map. You can find +others here: + +\fIhttps://wiki.openstreetmap.org/wiki/Tiles#Servers\fP +.TP 8 +.B \-origin \fIlocation\fP +"Random" means a fully random location somewhere on Earth, excluding +the oceans. + +"Random-city" means to select from a built-in list of several hundred +major cities. This is the default. + +Otherwise, this must be a latitude/longitude pair, as floats. +.TP 8 +.B \-titles | \-no-titles +Whether to show the current coordinates in the upper left. Default true. +.TP 8 +.B \-arrow | \-no-arrow +Whether to show a directional arrow in the middle of the screen. Default true. +.TP 8 +.B \-fps | \-no-fps +Whether to show a frames-per-second display at the bottom of the screen. +.SH FILES +The map tile images are loaded from the network and cached on disk. Up to 20MB +of them are retained. Depending on your operating system, the cache directory +will be one of: +.nf +.sp + $HOME/.cache/xscreensaver/mapscroller/ + $HOME/tmp/.xscreensaver-mapscroller/ + $HOME/.xscreensaver-mapscroller.cache/ + $HOME/Library/Caches/org.jwz.xscreensaver.mapscroller/ +.fi +.SH BUGS +Some parts of the world are boring. +.SH ENVIRONMENT +.PP +.TP 8 +.B DISPLAY +to get the default host and display number. +.TP 8 +.B XENVIRONMENT +to get the name of a resource file that overrides the global resources +stored in the RESOURCE_MANAGER property. +.TP 4 +.B HTTP_PROXY, HTTPS_PROXY, http_proxy, or https_proxy +to get the default proxy host and port. +.SH SEE ALSO +.BR X (1), +.BR xscreensaver (1), +.BR https://www.openstreetmap.org/ +.SH COPYRIGHT +Copyright \(co 2022 by Jamie Zawinski. 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. No representations are made about the +suitability of this software for any purpose. It is provided "as is" without +express or implied warranty. + +OpenStreetMap map data is \(co OpenStreetMap contributors under the +Open Database License. +.SH AUTHOR +Jamie Zawinski. diff --git a/hacks/glx/mapscroller.pl b/hacks/glx/mapscroller.pl new file mode 100755 index 00000000..c8cba0c5 --- /dev/null +++ b/hacks/glx/mapscroller.pl @@ -0,0 +1,489 @@ +#!/usr/bin/perl -w +# Copyright © 2021-2022 Jamie Zawinski +# +# 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. No representations are made about the suitability of this +# software for any purpose. It is provided "as is" without express or +# implied warranty. +# +# This is forked by mapscroller.c to do network activity, since doing https +# from C code is untenable. +# +# Created: 14-Dec-2021. + +require 5; +#use diagnostics; # Fails on some MacOS 10.5 systems +use strict; + +use POSIX ('strftime', ':fcntl_h'); # S_ISDIR was here in Perl 5.6 +import Fcntl ':mode' unless defined &S_ISUID; # but it is here in Perl 5.8 + # but in Perl 5.10, both of these load, and cause errors! + # So we have to check for S_ISUID instead of S_ISDIR? WTF? +use Fcntl ':flock'; # import LOCK_* constants + +# Some Linux systems don't install LWP by default! +BEGIN { eval 'use LWP::Simple' } + +my $progname = $0; $progname =~ s@.*/@@g; +$progname =~ s@\.pl$@@g; +my ($version) = ('$Revision: 1.5 $' =~ m/\s(\d[.\d]+)\s/s); + +my $verbose = 0; +my $url_template = undef; +my $cache_size = '20M'; +my $cache_dir = undef; +my $current_cache_size = 0; +my %cached_files; + +# Anything placed on this list gets unconditionally deleted when this +# script exits, even if abnormally. +# +my %rm_f; +END { + my $exit = $?; + my @rm_f = keys %rm_f; + unlink @rm_f if (@rm_f); + $? = $exit; # Don't clobber this script's exit code. +} + +sub signal_cleanup($) { + my ($s) = @_; + print STDERR "$progname: SIG$s\n" if ($verbose > 1); + exit (1); # This causes END{} to run. +} + +$SIG{TERM} = \&signal_cleanup; # kill +$SIG{INT} = \&signal_cleanup; # shell ^C +$SIG{QUIT} = \&signal_cleanup; # shell ^| +$SIG{KILL} = \&signal_cleanup; # nope +$SIG{ABRT} = \&signal_cleanup; +$SIG{PIPE} = \&signal_cleanup; +$SIG{HUP} = \&signal_cleanup; + + +sub blurb() { + return ("$progname: " . strftime('%H:%M:%S', localtime) . + ': ' . getppid() . ': '); # Parent, so multi-screen log lines match +} + + +sub init_lwp() { + if (! defined ($LWP::Simple::ua)) { + error ("\n\n\tPerl is broken. Do this to repair it:\n" . + "\n\tsudo cpan LWP::Simple LWP::Protocol::https Mozilla::CA\n"); + } +} + + +my $sanity_checked_p = 0; +sub sanity_check_lwp() { + return if $sanity_checked_p; + $sanity_checked_p = 1; + my $url1 = 'https://www.mozilla.org/'; + my $url2 = 'http://www.mozilla.org/'; + my $body = (LWP::Simple::get($url1) || ''); + if (length($body) < 10240) { + my $err = ""; + $body = (LWP::Simple::get($url2) || ''); + if (length($body) < 10240) { + $err = "Perl is broken: neither HTTP nor HTTPS URLs work."; + } else { + $err = "Perl is broken: HTTP URLs work but HTTPS URLs don't."; + } + $err .= "\nMaybe try: sudo cpan -f Mozilla::CA LWP::Protocol::https"; + $err =~ s/^/\t/gm; + error ("\n\n$err\n"); + } +} + + +# Prevent multiple copies of this program from hitting the network at +# the same time, to be a little more gentle on the tile servers. +# +my $lock_fd = undef; # global scope so it doesn't GC +sub acquire_lock() { + my $lockfile = "$cache_dir/.read.lock"; + open ($lock_fd, '+>>', $lockfile) || error ("writing $lockfile: $!"); + + while (1) { + if (! flock ($lock_fd, LOCK_EX | LOCK_NB)) { + if ($verbose > 3) { + my $age = time() - (stat($lock_fd))[9]; + $age = sprintf("%d:%02d:%02d", $age/60/60, ($age/60)%60, $age%60); + print STDERR "waiting for lock (locked for $age)\n"; + } + select (undef, undef, undef, 0.1); # Busy wait + } else { + print STDERR blurb() . "locked\n" if ($verbose > 2); + # Acquired lock, set file mtime to now. + # macOS 11.6, perl 5.28.3: "The futimes function is unimplemented". + # This worked on macOS 10.14: + # utime (undef, undef, $lock_fd); + utime (undef, undef, $lockfile); + last; + } + } +} + +# Only one process is in charge of clearing the cache, +# and it holds that lock until exit and auto-unlock. +# +my $cache_lock_fd = undef; # global scope so it doesn't GC +sub acquire_cache_lock() { + + return 1 if ($cache_lock_fd); # We already hold the lock + + my $lockfile = "$cache_dir/.cache.lock"; + open ($cache_lock_fd, '+>>', $lockfile) || error ("writing $lockfile: $!"); + + if (flock ($cache_lock_fd, LOCK_EX | LOCK_NB)) { + print STDERR blurb() . "acquired cache lock\n" if ($verbose > 2); + # Acquired lock, set file mtime to now. + # macOS 11.6, perl 5.28.3: "The futimes function is unimplemented". + # This worked on macOS 10.14: + # utime (undef, undef, $cache_lock_fd); + utime (undef, undef, $lockfile); + return 1; + } else { + print STDERR blurb() . "cache locked by another process\n" + if ($verbose > 2); + close ($cache_lock_fd); + $cache_lock_fd = undef; + return 0; + } +} + + +sub release_lock() { + return unless $lock_fd; + flock ($lock_fd, LOCK_UN) || error ("unable to unlock"); + $lock_fd = undef; + print STDERR blurb() . "unlocked\n" if ($verbose > 2); +} + + +sub apply_template($$$) { + my ($x, $y, $z) = @_; + # https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames + my $url = $url_template; + error ("bad url template: $url") unless ($url =~ m/\{/si); + error ("no X in template: $url") unless ($url =~ m/\{\$?x/si); + error ("no Y in template: $url") unless ($url =~ m/\{\$?y/si); + error ("no Z in template: $url") unless ($url =~ m/\{\$?z/si); + $url =~ s%\$?{(.*?)}%{ + my ($s) = $1; + if ($s =~ m/^\$?x$/si) { $s = $x; } # {$x} + elsif ($s =~ m/^\$?y$/si) { $s = $y; } # {$y} + elsif ($s =~ m/^\$?z$/si) { $s = $z; } # {$z} + elsif ($s =~ m/^([a-z\d])-([a-z\d])$/si) { # {a-c} + my ($from, $to) = (ord($1), ord($2)); + my @a = ( $from .. $to ); + $s = chr($a[rand() * @a]); + } else { error ("unparsable substitution: {$s} in $url"); } + $s; + }%gsexi; + + error ("bad url template: $url") if ($url =~ m/[{}]/s); + return $url; +} + + +# Returns cache file name, or 3-digit status code. +# +sub load_tile($$$$) { + my ($ua, $x, $y, $z) = @_; + + my $timeout = 30; + + # Sanitize the template into a directory name + my $site = lc($url_template); + my ($suf) = ($site =~ m@\.([^./?#]+)$@si); + error ("no suffix in url template: $url_template") unless $suf; + + $site =~ s@{.*?}@@gs; + $site =~ s@\.[^./]+$@@gs; # .png + $site =~ s@^[^:/]+://@@gs; # https:// + $site =~ s@^www\d*@@gs; # www. + $site =~ s@[^-_a-z\d.]@_@gs; # non-alnum + $site =~ s@([-_])\1+@$1@gs; # consecutive _ + $site =~ s@^[-_.]+|[-_.]+$@@gs; # leading _ + error ("bad url template: $url_template") unless $site; + + # If the file already exists, just return it. + # + my $file = "$cache_dir/$site/$z/$y/$x.$suf"; + if (-f $file) { + # Don't assume that the file exists because it is in $cached_files{$file} + # as it might have been deleted when another process flushed the cache. + print STDERR blurb() . "cached: $x $y $z\n" if ($verbose > 1); + return $file; + } + + my $url = apply_template ($x, $y, $z); + + # Hit the network. + # + my $tmpfile = sprintf("%s/%08x.%s", $cache_dir, rand() * 0xFFFFFFFF, $suf); + $rm_f{$tmpfile} = 1; + + acquire_lock(); + print STDERR blurb() . "downloading $url\n" if ($verbose > 1); + + my $res = undef; + $ua->timeout ($timeout); + my $timed_out_p = 1; + eval { + local $SIG{ALRM} = sub { die "timed out\n"; }; + alarm $timeout; + $res = $ua->get ($url, ':content_file' => $tmpfile); + $timed_out_p = 0; + }; + alarm 0; + + release_lock(); + + if (!$res || !$res->is_success) { + unlink $tmpfile; + sanity_check_lwp(); + print STDERR blurb() . "$url " . + ($res ? $res->status_line : "timed out") . "\n" + if ($verbose > 1); + + my $status = ($res && $res->code) || ''; + $status = '500' unless ($status =~ m/^\d\d\d$/si); + $status = '500' if ($status eq '504'); # Ignore theirs + $status = '504' if ($timed_out_p); # It means only this + return $status; + } + + my $ct = $res->header ('Content-Type') || 'null'; + my $cl = $res->header ('Content-Length') || 0; + if (! ($ct =~ m@^image/@si)) { + unlink $tmpfile; + sanity_check_lwp(); + print STDERR blurb() . "$url has content-type $ct\n" if ($verbose > 1); + return '400'; # Let's call it "Bad Request" and not retry. + } + + if ($cl < 10) { # Ocean tiles are only 103 bytes! + unlink $tmpfile; + sanity_check_lwp(); + print STDERR blurb() . "$url has content-length $cl\n" if ($verbose > 1); + return '400'; # Let's call it "Bad Request" and not retry. + } + + # We got the document, and it has a sensible content type. + # Move it into place. + + # Make sure the subdirs exist. + foreach my $d ("$cache_dir/$site", + "$cache_dir/$site/$z", + "$cache_dir/$site/$z/$y") { + if (! -d $d) { + mkdir ($d) || error ("mkdir $d: $!"); + print STDERR blurb() . "mkdir $d\n" if ($verbose > 2); + } + } + + utime (undef, undef, $tmpfile); + rename ($tmpfile, $file) || error ("mv $tmpfile $file: $!"); + delete $rm_f{$tmpfile}; + $current_cache_size += $cl; + $cached_files{$file} = time(); + return $file; +} + + +# To keep the cache below a fixed size, we need to tally up the sizes +# of every file in the directory. And to delete them by least-recently-used, +# we need to retain the last-access date of each file. This could be a lot +# of RAM, I suppose. +# +# If two copies of this are running, only one of them is in charge of the +# cache. Should that other process die, the remaining process will take +# over the lock. +# +sub scan_cache_dir($); +sub scan_cache_dir($) { + my ($dir) = @_; + opendir (my $dh, $dir) || error ("$dir: $!"); + print STDERR blurb() . "scanning $dir\n" if ($verbose > 3); + foreach my $f (readdir ($dh)) { + next if ($f =~ m/^\./si); + $f = "$dir/$f"; + my @st = stat($f); + my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, + $atime,$mtime,$ctime,$blksize,$blocks) = @st; + if (S_ISDIR($mode)) { + scan_cache_dir ($f); + } else { + $cached_files{$f} = $atime; + $current_cache_size += $size; + } + } + closedir $dh; +} + + +sub clean_cache() { + return if ($current_cache_size <= $cache_size); + my $osize = $current_cache_size; + my $now = time(); + my $deleted_bytes = 0; + my $deleted_files = 0; + + # Delete a bit more than necessary so that we re-scan less frequently. + # 2MB means re-scanning roughly every 20-40 minutes, with one screen. + my $slack = $cache_size * 0.5; + $slack = 2*1024*1024 if ($slack > 2*1024*1024); + + foreach my $f (sort { $cached_files{$a} <=> $cached_files{$b} } + keys %cached_files) { + + last if ($current_cache_size <= $cache_size - $slack); + + my @st = stat($f); + my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, + $atime,$mtime,$ctime,$blksize,$blocks) = @st; + next unless defined ($size); # File aready missing + next if ($mtime >= $now - 60); # Keep file if less than a minute old + unlink ($f); # || error ("rm $f: $!"); + print STDERR blurb() . "rm $f (" . localtime($cached_files{$f}) . ")\n" + if ($verbose > 2); + delete $cached_files{$f}; + $current_cache_size -= $size; + $deleted_bytes += $size; + $deleted_files++; + + # Also delete now-empty subdirectories. + my $depth = 0; + while ($depth < 3 && $f =~ s@/[^/]+$@@) { + $depth++; + if (rmdir ($f)) { + print STDERR blurb() . "rmdir $f\n" if ($verbose > 2); + } else { + print STDERR blurb() . "rmdir $f: not empty\n" if ($verbose > 3); + last; + } + } + } + + if ($deleted_files && $verbose) { + my $b = sprintf ("%.1f MB", $deleted_bytes / (1024*1024)); + my $b2 = sprintf ("%.1f MB", $osize / (1024*1024)); + print STDERR blurb() . "deleted $deleted_files cached tiles" . + " ($b of $b2)\n"; + } +} + + +sub mapscroller() { + init_lwp(); + my $ua = $LWP::Simple::ua; + my $name = "xscreensaver-$progname"; + $name =~ s/\.pl$//s; + $ua->agent ("$name/$version"); + + my $scanned_p = 0; + my $last_cleaned = time(); + my $clean_every = 45; + + while () { + my $line = $_; + my ($x, $y, $z) = ($line =~ m/^(\d+)\s+(\d+)\s+(\d+)\s*$/s); + error ("unparsable: $line") unless defined ($z); + my $file = load_tile ($ua, $x, $y, $z); + print STDOUT "$x $y $z\t$file\n" if defined ($file); + + # Don't prune the cache more often than every N seconds. + # And don't do it on the first run, as we are probably loading + # a burst of tiles. + if (time() > $last_cleaned + $clean_every) { + if (acquire_cache_lock()) { + if (! $scanned_p) { + $scanned_p = 1; + undef %cached_files; # Clear it, as scan is definitive. + $current_cache_size = 0; + scan_cache_dir ($cache_dir); + if ($verbose) { + my $n = scalar (keys %cached_files); + my $b1 = sprintf ("%.1f MB", $current_cache_size / (1024*1024)); + my $b2 = sprintf ("%.0f MB", $cache_size / (1024*1024)); + print STDERR blurb() . "$n cached tiles ($b1 of $b2)\n"; + } + } + clean_cache(); + } + $last_cleaned = time(); + } + } +} + + +sub error($) { + my ($err) = @_; + print STDERR blurb() . "$err\n"; + exit 1; +} + +sub usage() { + print STDERR "usage: $progname --url-template \"U\" " . + "[--cache-size \"N MB\"] [--verbose]\n" . + "\n" . + "This is a helper program for the 'mapscroller' screen saver.\n" . + "Reads \"X Y Z\" on stdin and writes cached tile filenames to stdout.\n" . + "\n"; + exit 1; +} + +sub main() { + + $|=1; + binmode (STDIN, ':utf8'); + binmode (STDOUT, ':utf8'); + binmode (STDERR, ':utf8'); + + while (@ARGV) { + $_ = shift @ARGV; + if (m/^--?verbose$/s) { $verbose++; } + elsif (m/^-v+$/s) { $verbose += length($_)-1; } + elsif (m/^--?url(-template)$/s) { $url_template = shift @ARGV; } + elsif (m/^--?cache-size$/s) { $cache_size = shift @ARGV; } + elsif (m/^-./s) { usage; } + else { usage; } + } + + usage unless (($url_template || '') =~ m@^https?://@s); + + my $s = $cache_size; + if ($s =~ s@\s*KB?$@@si) { $s = $s * 1024; } + elsif ($s =~ s@\s*MB?$@@si) { $s = $s * 1024*1024; } + elsif ($s =~ s@\s*GB?$@@si) { $s = $s * 1024*1024*1024; } + elsif ($s =~ m/^\d+$/s) { $s = 0 + $s; } + else { error ("unparsable units: $s"); } + $cache_size = $s; + + my $dd = "$ENV{HOME}/Library/Caches"; # MacOS location + if (-d $dd) { + $cache_dir = "$dd/org.jwz.xscreensaver.mapscroller"; + } elsif (-d "$ENV{HOME}/.cache") { # Gnome "FreeDesktop XDG" location + $dd = "$ENV{HOME}/.cache/xscreensaver"; + if (! -d $dd) { mkdir ($dd) || error ("mkdir $dd: $!"); } + $cache_dir = "$dd/mapscroller" + } elsif (-d "$ENV{HOME}/tmp") { # If ~/tmp/ exists, use it. + $cache_dir = "$ENV{HOME}/tmp/.xscreensaver-mapscroller"; + } else { + $cache_dir = "$ENV{HOME}/.xscreensaver-mapscroller.cache"; + } + + $dd = $cache_dir; + if (! -d $dd) { mkdir ($dd) || error ("mkdir $dd: $!"); } + + mapscroller(); +} + +main(); +exit 0; diff --git a/hacks/glx/sonar-icmp.c b/hacks/glx/sonar-icmp.c index b23b6bfd..5dc366b9 100644 --- a/hacks/glx/sonar-icmp.c +++ b/hacks/glx/sonar-icmp.c @@ -1702,10 +1702,17 @@ sonar_init_ping (Display *dpy, char **error_ret, char **desc_ret, fprintf (stderr, "%s: re-using icmp socket\n", progname); } +# if defined(__APPLE__) && defined(__MACH__) + /* As of Debian 11.1 (kernel 5.10) this call *succeeds* but no ping + responses are received, even when sonar is setuid root. Previously, + this call would fail on Linux, and would only succeed on macOS, and + did not require root there. I have no idea what happens on the BSDs. + */ else if ((pd->icmpsock = socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP)) >= 0) { socket_initted_p = True; } +# endif /* macOS */ else if (set_ping_capability() && (pd->icmpsock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)) >= 0) { diff --git a/hacks/glx/sphereeversion-analytic.c b/hacks/glx/sphereeversion-analytic.c new file mode 100644 index 00000000..7caeb14d --- /dev/null +++ b/hacks/glx/sphereeversion-analytic.c @@ -0,0 +1,2232 @@ +/* sphereeversion-analytic --- Shows a sphere eversion, i.e., a smooth + deformation (homotopy) that turns a sphere inside out. During the + eversion, the deformed sphere is allowed to intersect itself + transversally. However, no creases or pinch points are allowed to + occur. */ + +/* Copyright (c) 2020-2022 Carsten Steger . */ + +/* + * 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. + * + * This file is provided AS IS with no warranties of any kind. The author + * shall have no liability with respect to the infringement of copyrights, + * trade secrets or any patents by this file or any part thereof. In no + * event will the author be liable for any lost revenue or profits or + * other special, indirect and consequential damages. + * + * REVISION HISTORY: + * C. Steger - 22/02/25: Moved the analytic sphere eversion code to this file + */ + +/* + * This program shows a sphere eversion, i.e., a smooth deformation + * (homotopy) that turns a sphere inside out. During the eversion, + * the deformed sphere is allowed to intersect itself transversally. + * However, no creases or pinch points are allowed to occur. + * + * The deformed sphere can be projected to the screen either + * perspectively or orthographically. + * + * There are three display modes for the sphere: solid, transparent, + * or random. If random mode is selected, the mode is changed each + * time an eversion has been completed. + * + * The appearance of the sphere can be as a solid object, as a set of + * see-through bands, or random. The bands can be parallel bands or + * meridian bands, i.e., bands that run along the parallels (lines of + * latitude) or bands that run along the meridians (lines of + * longitude) of the sphere. If random mode is selected, the + * appearance is changed each time an eversion has been completed. + * + * It is also possible to display a graticule (i.e., a coordinate grid + * consisting of parallel and meridian lines) on top of the surface. + * The graticule mode can be set to on, off, or random. If random + * mode is selected, the graticule mode is changed each time an + * eversion has been completed. + * + * It is possible to define a surface order of the sphere eversion as + * random or as a value between 2 and 5. This determines the the + * complexity of the deformation. For higher surface orders, some + * z-fighting might occur around the central stage of the eversion, + * which might lead to some irregular flickering of the displayed + * surface if it is displayed as a solid object. For odd surface + * orders, z-fighting will occur very close to the central stage of + * the eversion since the deformed sphere is a doubly covered Boy + * surface (for surface order 3) or a doubly covered generalized Boy + * surface (for surface order 5) in this case. If you find this + * distracting, you should set the surface order to 2. If a random + * surface order is selected, the surface order is changed each time + * an eversion has been completed. + * + * The colors with with the sphere is drawn can be set to two-sided, + * parallel, meridian, or random. In two-sided mode, the sphere is + * drawn with red on one side and green on the other side. In + * parallel mode, the sphere is displayed with colors that run from + * red to cyan on one side of the surface and from green to violet on + * the other side. The colors are aligned with the parallels of the + * sphere in this mode. In meridian mode, the the sphere is displayed + * with colors that run from red to white to cyan to black and back to + * red on one side of the surface and from green to white to violet to + * black and back to green on the other side. The colors are aligned + * with the meridians of the sphere in this mode. In earth mode, the + * sphere is drawn with a texture of earth by day on one side and with + * a texture of earth by night on the other side. Initially, the + * earth by day is on the outside and the earth by night on the + * inside. After the first eversion, the earth by night will be on + * the outside. All points of the earth on the inside and outside are + * at the same positions on the sphere. Since an eversion transforms + * the sphere into its inverse, the earth by night will appear with + * all continents mirror reversed. If random mode is selected, the + * color scheme is changed each time an eversion has been completed. + * + * By default, the sphere is rotated to a new viewing position each + * time an eversion has been completed. In addition, it is possible + * to rotate the sphere while it is deforming. The rotation speed for + * each of the three coordinate axes around which the sphere rotates + * can be chosen arbitrarily. For best effects, however, it is + * suggested to rotate only around the z axis while the sphere is + * deforming. + * + * This program is inspired by the following paper: Adam Bednorz, + * Witold Bednorz: "Analytic sphere eversion using ruled surfaces", + * Differential Geometry and its Applications 64:59-79, 2019. + */ + + +#ifdef STANDALONE +# include "xlockmore.h" /* from the xscreensaver distribution */ +#else /* !STANDALONE */ +# include "xlock.h" /* from the xlockmore distribution */ +#endif /* !STANDALONE */ + + +#ifdef USE_GL + +#include "sphereeversion.h" + +#include + + +/* Shape parameters for the Bednorz sphere eversion. */ +#define BEDNORZ_OMEGA 2.0 +#define BEDNORZ_Q (2.0/3.0) +#define BEDNORZ_ETA_MIN (3.0/4.0) +#define BEDNORZ_BETA_MAX 0.1 +#define BEDNORZ_ALPHA 1.0 +#define BEDNORZ_EPS2 0.001 +#define BEDNORZ_EPS3 0.002 +#define BEDNORZ_EPS4 0.001 +#define BEDNORZ_EPS5 0.002 + +#define BEDNORZ_TAU1 (1.0/BEDNORZ_Q) +#define BEDNORZ_TAU2 2.5 +#define BEDNORZ_TAU3 4.5 +#define BEDNORZ_TAU4 6.0 + +#define BEDNORZ_TAU_MIN (-BEDNORZ_TAU4) +#define BEDNORZ_TAU_MAX (BEDNORZ_TAU4) + +/* Number of subdivisions of the surface */ +#define NUMTH 256 +#define NUMPH 256 + +/* Number of subdivisions between grid lines */ +#define NUMGRID 32 + +/* Number of subdivisions per band */ +#define NUMBDIR 16 +#define NUMBDIST 16 + +typedef struct { + int n; + double kappa; + double omega; + double t; + double p; + double q; + double xi; + double eta; + double alpha; + double beta; + double gamma; + double lambda; + double eps; +} bednorz_shape_par; + + + +/* Compute a 3D rotation matrix from an xscreensaver unit quaternion. Note + that xscreensaver has a different convention for unit quaternions than + the one that is used in this hack. */ +static void quat_to_rotmat(float p[4], float m[3][3]) +{ + float al, be, de; + float r00, r01, r02, r12, r22; + + r00 = 1.0f-2.0f*(p[1]*p[1]+p[2]*p[2]); + r01 = 2.0f*(p[0]*p[1]+p[2]*p[3]); + r02 = 2.0f*(p[2]*p[0]-p[1]*p[3]); + r12 = 2.0f*(p[1]*p[2]+p[0]*p[3]); + r22 = 1.0f-2.0f*(p[1]*p[1]+p[0]*p[0]); + + al = atan2f(-r12,r22)*180.0f/M_PI_F; + be = atan2f(r02,sqrtf(r00*r00+r01*r01))*180.0f/M_PI_F; + de = atan2f(-r01,r00)*180.0f/M_PI_F; + rotateall(al,be,de,m); +} + + +/* Compute the cross product between the vectors a and b. */ +static inline void cross(float a[3], float b[3], float c[3]) +{ + c[0] = a[1]*b[2]-a[2]*b[1]; + c[1] = a[2]*b[0]-a[0]*b[2]; + c[2] = a[0]*b[1]-a[1]*b[0]; +} + + +/* Compute x^n for integers 0 <= n <= 11 efficiently. */ +static inline double ipow(double x, int n) +{ + double x2, x4, x8; + + switch (n) + { + case 0: + return 1.0; + case 1: + return x; + case 2: + x2 = x*x; + return x2; + case 3: + x2 = x*x; + return x2*x; + case 4: + x2 = x*x; + x4 = x2*x2; + return x4; + case 5: + x2 = x*x; + x4 = x2*x2; + return x4*x; + case 6: + x2 = x*x; + x4 = x2*x2; + return x4*x2; + case 7: + x2 = x*x; + x4 = x2*x2; + return x4*x2*x; + case 8: + x2 = x*x; + x4 = x2*x2; + x8 = x4*x4; + return x8; + case 9: + x2 = x*x; + x4 = x2*x2; + x8 = x4*x4; + return x8*x; + case 10: + x2 = x*x; + x4 = x2*x2; + x8 = x4*x4; + return x8*x2; + case 11: + x2 = x*x; + x4 = x2*x2; + x8 = x4*x4; + return x8*x2*x; + default: + return pow(x,n); + } +} + + +/* Compute the Bednorz shape parameter kappa based on the eversion order n. */ +static inline double bednorz_get_kappa(int n) +{ + return (n-1.0)/(2.0*n); +} + + +/* Compute the Bednorz shape parameter t based on the deformation + parameter tau. */ +static inline double bednorz_get_t(double tau) +{ + return (tau >= BEDNORZ_TAU1 ? + BEDNORZ_TAU1 : + (tau <= -BEDNORZ_TAU1 ? + -BEDNORZ_TAU1 : + tau)); +} + + +/* Compute the Bednorz shape parameter q based on the deformation + parameter tau. */ +static inline double bednorz_get_q(double tau) +{ + double abs_tau; + + abs_tau = fabs(tau); + return (abs_tau < BEDNORZ_TAU1 ? + 0.0 : + (abs_tau < BEDNORZ_TAU2 ? + BEDNORZ_Q*(abs_tau-BEDNORZ_TAU1)/(BEDNORZ_TAU2-BEDNORZ_TAU1) : + BEDNORZ_Q)); +} + + +/* Compute the Bednorz shape parameter p based on the deformation + parameter tau. */ +static inline double bednorz_get_p(double tau) +{ + return 1.0-fabs(bednorz_get_q(tau)*bednorz_get_t(tau)); +} + + +/* Compute the Bednorz shape parameter xi based on the deformation + parameter tau. */ +static inline double bednorz_get_xi(double tau) +{ + double abs_tau; + + abs_tau = fabs(tau); + return (abs_tau < BEDNORZ_TAU2 ? + 1.0 : + (abs_tau < BEDNORZ_TAU3 ? + (BEDNORZ_TAU3-abs_tau)/(BEDNORZ_TAU3-BEDNORZ_TAU2) : + 0.0)); +} + + +/* Compute the Bednorz shape parameter eta based on the deformation + parameter tau and the shape parameter eta_min. */ +static inline double bednorz_get_eta(double tau, double eta_min) +{ + double abs_tau; + + abs_tau = fabs(tau); + return (abs_tau < BEDNORZ_TAU2 ? + eta_min : + (abs_tau < BEDNORZ_TAU3 ? + (eta_min+(1.0-eta_min)* + (abs_tau-BEDNORZ_TAU2)/(BEDNORZ_TAU3-BEDNORZ_TAU2)) : + 1.0)); +} + + +/* Compute the Bednorz shape parameter alpha based on the deformation + parameter tau. */ +static inline double bednorz_get_alpha(double tau) +{ + double xi; + + xi = bednorz_get_xi(tau); + return BEDNORZ_ALPHA*ipow(xi,2); +} + + +/* Compute the Bednorz shape parameter beta based on the deformation + parameter tau and the shape parameter beta_max. */ +static inline double bednorz_get_beta(double tau, double beta_max) +{ + double xi; + + xi = bednorz_get_xi(tau); + return ipow(1.0-xi,2)+beta_max*ipow(xi,3); +} + + +/* Compute the Bednorz shape parameter gamma based on the shape + parameters alpha and beta. */ +static inline double bednorz_get_gamma(double alpha, double beta) +{ + return 2.0*sqrt(alpha*beta); +} + + +/* Compute the Bednorz shape parameter lambda based on the deformation + parameter tau. */ +static inline double bednorz_get_lambda(double tau) +{ + double abs_tau; + + abs_tau = fabs(tau); + return (abs_tau < BEDNORZ_TAU3 ? + 1.0 : + (abs_tau < BEDNORZ_TAU4 ? + (BEDNORZ_TAU4-abs_tau)/(BEDNORZ_TAU4-BEDNORZ_TAU3) : + 0.0)); +} + + +/* Compute the Bednorz shape parameter eps based on the deformation + parameter tau and the eversion order n. This is an extension to the + original approach that prevents z fighting to some extent in certain + stages of the eversion. */ +static inline double bednorz_get_eps(double tau, int n) +{ + double sgn_tau, abs_tau; + + sgn_tau = (tau < 0.0 ? -1.0 : (tau > 0.0 ? 1.0 : 0.0)); + abs_tau = fabs(tau); + switch (n) + { + case 2: + return (abs_tau < BEDNORZ_TAU1 ? + 0.0 : + (abs_tau < BEDNORZ_TAU2 ? + (BEDNORZ_EPS2*sgn_tau* + (abs_tau-BEDNORZ_TAU1)/(BEDNORZ_TAU2-BEDNORZ_TAU1)) : + (abs_tau < BEDNORZ_TAU3 ? + BEDNORZ_EPS2*sgn_tau : + (abs_tau < BEDNORZ_TAU4 ? + (BEDNORZ_EPS2*sgn_tau* + (BEDNORZ_TAU4-abs_tau)/(BEDNORZ_TAU4-BEDNORZ_TAU3)) : + 0.0)))); + case 3: + return (abs_tau < BEDNORZ_TAU1 ? + BEDNORZ_EPS3*sgn_tau*abs_tau/BEDNORZ_TAU1 : + (abs_tau < BEDNORZ_TAU3 ? + BEDNORZ_EPS3*sgn_tau : + (abs_tau < BEDNORZ_TAU4 ? + (BEDNORZ_EPS3*sgn_tau* + (BEDNORZ_TAU4-abs_tau)/(BEDNORZ_TAU4-BEDNORZ_TAU3)) : + 0.0))); + case 4: + return (abs_tau < BEDNORZ_TAU1 ? + BEDNORZ_EPS4*sgn_tau*abs_tau/BEDNORZ_TAU1 : + (abs_tau < BEDNORZ_TAU3 ? + BEDNORZ_EPS4*sgn_tau : + (abs_tau < BEDNORZ_TAU4 ? + (BEDNORZ_EPS4*sgn_tau* + (BEDNORZ_TAU4-abs_tau)/(BEDNORZ_TAU4-BEDNORZ_TAU3)) : + 0.0))); + case 5: + return (abs_tau < BEDNORZ_TAU1 ? + BEDNORZ_EPS5*sgn_tau*abs_tau/BEDNORZ_TAU1 : + (abs_tau < BEDNORZ_TAU3 ? + BEDNORZ_EPS5*sgn_tau : + (abs_tau < BEDNORZ_TAU4 ? + (BEDNORZ_EPS5*sgn_tau* + (BEDNORZ_TAU4-abs_tau)/(BEDNORZ_TAU4-BEDNORZ_TAU3)) : + 0.0))); + default: + return 0.0; + } +} + + +/* Compute the equations for a point x and its partial derivatives dxdph and + dxdth in the Bednorz sphere eversion based on the sphere parameters phi + (longitude) and theta (latitude) and the shape parameters bsp. This + corresponds to equations (4), (12), and (15) in the paper. */ +static inline void bednorz_get_p0(double phi, double theta, + bednorz_shape_par *bsp, double x[3], + double dxdph[3], double dxdth[3]) +{ + int n; + double kappa, omega, t, p, q, eta, lambda; + double ct, st, cp, sp, cnm1p, snm1p, cnp, snp; + double ctn, ictn, ictnp1, ct2, st2, ct2n, ict2n, ict2np1, ton; + double oml, omlplctn, pe1pk, tat2k, nst2pct2, ost, snpmqt; + double nm1p, ostictn, oictnp1, nst2pct2oictnp1, tcp, tsp; + double lost, tomlplctn, lostcp, lostsp, tomlplctncp, tomlplctnsp; + double tomlplctncpmlostsp, tomlplctnspplostcp, ntctnst, oct2; + double omlpe1pktat2k, nst2; + + n = bsp->n; + kappa = bsp->kappa; + omega = bsp->omega; + t = bsp->t; + p = bsp->p; + q = bsp->q; + eta = bsp->eta; + lambda = bsp->lambda; + + ct = cos(theta); + st = sin(theta); + cp = cos(phi); + sp = sin(phi); + cnp = cos(n*phi); + snp = sin(n*phi); + ctn = ipow(ct,n); + ictn = 1.0/ctn; + ictnp1 = ictn/ct; + ct2 = ct*ct; + st2 = st*st; + ton = t/n; + snpmqt = snp-q*t; + ost = omega*st; + + if (lambda >= 1.0) + { + cnm1p = cos((n-1)*phi); + snm1p = sin((n-1)*phi); + nst2pct2 = n*st2+ct2; + nm1p = (n-1)*p; + tcp = t*cp; + tsp = t*sp; + ostictn = ost*ictn; + oictnp1 = omega*ictnp1; + nst2pct2oictnp1 = nst2pct2*oictnp1; + x[0] = p*snm1p-sp*ostictn+tcp; + x[1] = p*cnm1p+cp*ostictn+tsp; + x[2] = snpmqt*ostictn-ton*cnp; + dxdph[0] = nm1p*cnm1p-cp*ostictn-tsp; + dxdph[1] = -nm1p*snm1p-sp*ostictn+tcp; + dxdph[2] = n*cnp*ostictn+t*snp; + dxdth[0] = -sp*nst2pct2oictnp1; + dxdth[1] = cp*nst2pct2oictnp1; + dxdth[2] = snpmqt*nst2pct2oictnp1; + /* The same formulas written out in full glory: + x[0] = (t*cos(phi)+ + p*sin((n-1)*phi)- + (omega*sin(theta)/ipow(cos(theta),n))*sin(phi)); + x[1] = (t*sin(phi)+ + p*cos((n-1)*phi)+ + (omega*sin(theta)/ipow(cos(theta),n))*cos(phi)); + x[2] = ((omega*sin(theta)/ipow(cos(theta),n))*sin(n*phi)- + (t/n)*cos(n*phi)- + omega*q*t*sin(theta)/ipow(cos(theta),n)); + dxdph[0] = (-t*sin(phi)+ + (n-1)*p*cos((n-1)*phi)- + (omega*sin(theta)/ipow(cos(theta),n))*cos(phi)); + dxdph[1] = (t*cos(phi)- + (n-1)*p*sin((n-1)*phi)- + (omega*sin(theta)/ipow(cos(theta),n))*sin(phi)); + dxdph[2] = ((n*omega*sin(theta)/ipow(cos(theta),n))*cos(n*phi)+ + t*sin(n*phi)); + dxdth[0] = -((omega*sin(phi)*(n*ipow(sin(theta),2)+ipow(cos(theta),2)))/ + ipow(cos(theta),n+1)); + dxdth[1] = ((omega*cos(phi)*(n*ipow(sin(theta),2)+ipow(cos(theta),2)))/ + ipow(cos(theta),n+1)); + dxdth[2] = ((omega*sin(n*phi)*(n*ipow(sin(theta),2)+ipow(cos(theta),2))/ + ipow(cos(theta),n+1))- + (omega*q*t*(n*ipow(sin(theta),2)+ipow(cos(theta),2))/ + ipow(cos(theta),n+1))); + */ + } + else + { + ct2n = ipow(ct,2*n); + ict2n = 1.0/ct2n; + ict2np1 = ict2n/ct; + oml = 1.0-lambda; + omlplctn = oml+lambda*ctn; + pe1pk = pow(eta,1.0+kappa); + tat2k = t*pow(fabs(t),2.0*kappa); + lost = lambda*ost; + lostcp = lost*cp; + lostsp = lost*sp; + tomlplctn = t*omlplctn; + tomlplctncp = tomlplctn*cp; + tomlplctnsp = tomlplctn*sp; + tomlplctncpmlostsp = tomlplctncp-lostsp; + tomlplctnspplostcp = tomlplctnsp+lostcp; + ntctnst = n*t*ctn*st; + oct2 = omega*ct2; + omlpe1pktat2k = oml*pe1pk*tat2k; + nst2 = n*st2; + x[0] = tomlplctncpmlostsp*ictn; + x[1] = tomlplctnspplostcp*ictn; + x[2] = lambda*(ost*snpmqt*ictn-ton*cnp)-omlpe1pktat2k*st*ict2n; + dxdph[0] = -tomlplctnspplostcp*ictn; + dxdph[1] = tomlplctncpmlostsp*ictn; + dxdph[2] = lambda*(omega*n*st*cnp*ictn+t*snp); + dxdth[0] = (n*tomlplctncpmlostsp*st-lambda*(ntctnst*cp+oct2*sp))*ictnp1; + dxdth[1] = (n*tomlplctnspplostcp*st-lambda*(ntctnst*sp-oct2*cp))*ictnp1; + dxdth[2] = (lambda*omega*snpmqt*(nst2+ct2)*ictnp1- + omlpe1pktat2k*(2.0*nst2+ct2)*ict2np1); + /* The same formulas written out in full glory: + x[0] = ((t*(1.0-lambda+lambda*ipow(cos(theta),n))*cos(phi)- + lambda*omega*sin(theta)*sin(phi))/ + ipow(cos(theta),n)); + x[1] = ((t*(1.0-lambda+lambda*ipow(cos(theta),n))*sin(phi)+ + lambda*omega*sin(theta)*cos(phi))/ + ipow(cos(theta),n)); + x[2] = (lambda*(omega*sin(theta)*(sin(n*phi)-q*t)/ipow(cos(theta),n)- + (t/n)*cos(n*phi))- + (1.0-lambda)*pow(eta,1.0+kappa)* + t*pow(fabs(t),2.0*kappa)*sin(theta)/ipow(cos(theta),2*n)); + dxdph[0] = ((-t*(1.0-lambda+lambda*ipow(cos(theta),n))*sin(phi)- + lambda*omega*sin(theta)*cos(phi))/ + ipow(cos(theta),n)); + dxdph[1] = ((t*(1.0-lambda+lambda*ipow(cos(theta),n))*cos(phi)- + lambda*omega*sin(theta)*sin(phi))/ + ipow(cos(theta),n)); + dxdph[2] = (lambda*(omega*n*sin(theta)*(cos(n*phi))/ipow(cos(theta),n)+ + t*sin(n*phi))); + dxdth[0] = ((n*(t*(1.0-lambda+lambda*ipow(cos(theta),n))*cos(phi)- + lambda*omega*sin(theta)*sin(phi))*sin(theta)/ + ipow(cos(theta),n+1))- + (lambda*(n*t*ipow(cos(theta),n)*sin(theta)*cos(phi)+ + omega*ipow(cos(theta),2)*sin(phi))/ + ipow(cos(theta),n+1))); + dxdth[1] = ((n*(t*(1.0-lambda+lambda*ipow(cos(theta),n))*sin(phi)+ + lambda*omega*sin(theta)*cos(phi))*sin(theta)/ + ipow(cos(theta),n+1))- + (lambda*(n*t*ipow(cos(theta),n)*sin(theta)*sin(phi)- + omega*ipow(cos(theta),2)*cos(phi))/ + ipow(cos(theta),n+1))); + dxdth[2] = ((lambda*omega*(sin(n*phi)-q*t)* + (n*ipow(sin(theta),2)+ipow(cos(theta),2))/ + ipow(cos(theta),n+1))- + ((1.0-lambda)*pow(eta,1.0+kappa)*t*pow(fabs(t),2.0*kappa)* + (2.0*n*ipow(sin(theta),2)+ipow(cos(theta),2))/ + ipow(cos(theta),2*n+1))); + */ + } +} + + +/* Compute the equations for a point y and its partial derivatives dydph and + dydth in the Bednorz sphere eversion based on the sphere parameters phi + (longitude) and theta (latitude) and the shape parameters bsp. This + corresponds to equation (7) in the paper. */ +static inline void bednorz_get_p1(double phi, double theta, + bednorz_shape_par *bsp, double y[3], + double dydph[3], double dydth[3]) +{ + double kappa, xi, eta; + double x[3], dxdph[3], dxdth[3]; + double x0, x1, x2, x02, x12, x02px12, ex02px12, xipex02px12; + double ixipex02px122, ixipex02px12k, ixipex02px12kp1; + double x0dx0dphpx1dx1dph, x0dx0dthpx1dx1dth; + double tex0dx0dphpx1dx1dph, tex0dx0dthpx1dx1dth; + double ktex0dx0dphpx1dx1dph, ktex0dx0dthpx1dx1dth; + + kappa = bsp->kappa; + xi = bsp->xi; + eta = bsp->eta; + + bednorz_get_p0(phi,theta,bsp,x,dxdph,dxdth); + + x0 = x[0]; + x1 = x[1]; + x2 = x[2]; + x02 = x0*x0; + x12 = x1*x1; + x02px12 = x02+x12; + ex02px12 = eta*x02px12; + xipex02px12 = xi+ex02px12; + ixipex02px122 = 1.0/(xipex02px12*xipex02px12); + ixipex02px12k = 1.0/pow(xipex02px12,kappa); + ixipex02px12kp1 = ixipex02px12k/xipex02px12; + x0dx0dphpx1dx1dph = x0*dxdph[0]+x1*dxdph[1]; + x0dx0dthpx1dx1dth = x0*dxdth[0]+x1*dxdth[1]; + tex0dx0dphpx1dx1dph = 2.0*eta*x0dx0dphpx1dx1dph; + tex0dx0dthpx1dx1dth = 2.0*eta*x0dx0dthpx1dx1dth; + ktex0dx0dphpx1dx1dph = kappa*tex0dx0dphpx1dx1dph; + ktex0dx0dthpx1dx1dth = kappa*tex0dx0dthpx1dx1dth; + + y[0] = x0*ixipex02px12k; + y[1] = x1*ixipex02px12k; + y[2] = x2/xipex02px12; + dydph[0] = (dxdph[0]*xipex02px12-ktex0dx0dphpx1dx1dph*x0)*ixipex02px12kp1; + dydph[1] = (dxdph[1]*xipex02px12-ktex0dx0dphpx1dx1dph*x1)*ixipex02px12kp1; + dydph[2] = (dxdph[2]*xipex02px12-tex0dx0dphpx1dx1dph*x2)*ixipex02px122; + dydth[0] = (dxdth[0]*xipex02px12-ktex0dx0dthpx1dx1dth*x0)*ixipex02px12kp1; + dydth[1] = (dxdth[1]*xipex02px12-ktex0dx0dthpx1dx1dth*x1)*ixipex02px12kp1; + dydth[2] = (dxdth[2]*xipex02px12-tex0dx0dthpx1dx1dth*x2)*ixipex02px122; + + /* The same formulas written out in full glory: + y[0] = x[0]/pow(xi+eta*(ipow(x[0],2)+ipow(x[1],2)),kappa); + y[1] = x[1]/pow(xi+eta*(ipow(x[0],2)+ipow(x[1],2)),kappa); + y[2] = x[2]/(xi+eta*(ipow(x[0],2)+ipow(x[1],2))); + dydph[0] = ((dxdph[0]*(xi+eta*(ipow(x[0],2)+ipow(x[1],2)))- + 2.0*eta*kappa*x[0]*(x[0]*dxdph[0]+x[1]*dxdph[1]))/ + pow(xi+eta*(ipow(x[0],2)+ipow(x[1],2)),kappa+1.0)); + dydph[1] = ((dxdph[1]*(xi+eta*(ipow(x[0],2)+ipow(x[1],2)))- + 2.0*eta*kappa*x[1]*(x[0]*dxdph[0]+x[1]*dxdph[1]))/ + pow(xi+eta*(ipow(x[0],2)+ipow(x[1],2)),kappa+1.0)); + dydph[2] = ((dxdph[2]*(xi+eta*(ipow(x[0],2)+ipow(x[1],2)))- + 2.0*eta*x[2]*(x[0]*dxdph[0]+x[1]*dxdph[1]))/ + ipow(xi+eta*(ipow(x[0],2)+ipow(x[1],2)),2)); + dydth[0] = ((dxdth[0]*(xi+eta*(ipow(x[0],2)+ipow(x[1],2)))- + 2.0*eta*kappa*x[0]*(x[0]*dxdth[0]+x[1]*dxdth[1]))/ + pow(xi+eta*(ipow(x[0],2)+ipow(x[1],2)),kappa+1.0)); + dydth[1] = ((dxdth[1]*(xi+eta*(ipow(x[0],2)+ipow(x[1],2)))- + 2.0*eta*kappa*x[1]*(x[0]*dxdth[0]+x[1]*dxdth[1]))/ + pow(xi+eta*(ipow(x[0],2)+ipow(x[1],2)),kappa+1.0)); + dydth[2] = ((dxdth[2]*(xi+eta*(ipow(x[0],2)+ipow(x[1],2)))- + 2.0*eta*x[2]*(x[0]*dxdth[0]+x[1]*dxdth[1]))/ + ipow(xi+eta*(ipow(x[0],2)+ipow(x[1],2)),2)); + */ +} + + +/* Compute the equations for a point z and its partial derivatives dzdph and + dzdth in the Bednorz sphere eversion based on the sphere parameters phi + (longitude) and theta (latitude) and the shape parameters bsp. This + corresponds to equations (8) and (9) in the paper. */ +static void inline bednorz_get_p2(double phi, double theta, + bednorz_shape_par *bsp, double z[3], + double dzdph[3], double dzdth[3]) +{ + double alpha, beta, gamma; + double y[3], dydph[3], dydth[3]; + double y0, y1, y2, y02, y12, y02py12, egy2, apby02py12, amby02py12; + double iapby02py12, iapby02py122, igapby02py12, igapby02py122; + double ambogapb, egy2apby02py12, egy2amby02py12, tbegy2; + double y0dy0dphpy1dy1dph, y0dy0dthpy1dy1dth; + double iy02py12, iy02py122, ty0dy0dphpy1dy1dph, ty0dy0dthpy1dy1dth; + double tbegy2y0dy0dphpy1dy1dph, tbegy2y0dy0dthpy1dy1dth; + double gigapby02py122, gegy2amby02py12; + + alpha = bsp->alpha; + beta = bsp->beta; + gamma = bsp->gamma; + + bednorz_get_p1(phi,theta,bsp,y,dydph,dydth); + + y0 = y[0]; + y1 = y[1]; + y2 = y[2]; + y02 = y0*y0; + y12 = y1*y1; + y02py12 = y02+y12; + y0dy0dphpy1dy1dph = y0*dydph[0]+y1*dydph[1]; + y0dy0dthpy1dy1dth = y0*dydth[0]+y1*dydth[1]; + + if (alpha > 0.0) + { + /* For the north and south poles, the equations in bednorz_get_p0 + and bednorz_get_p1 become singular. Therefore, we include a special + treatment here. Furthermore, we compute the surface normal vector + based on the cross product of the partial derivative vectors in + bednorz_point_normal. For the north and south poles, the partial + derivative vectors are linearly dependent and thus don't yield a + useful normal vector. Therefore, we have to include a special + treatment for the two poles. */ + if (fabs(theta-M_PI/2.0) <= 1.0e-4) + { + z[0] = 0.0; + z[1] = 0.0; + z[2] = -sqrt(alpha/beta)/(alpha+beta); + dzdph[0] = 1.0; + dzdph[1] = 0.0; + dzdph[2] = 0.0; + dzdth[0] = 0.0; + dzdth[1] = 1.0; + dzdth[2] = 0.0; + } + else if (fabs(theta+M_PI/2.0) <= 1.0e-4) + { + z[0] = 0.0; + z[1] = 0.0; + z[2] = -sqrt(alpha/beta)/(alpha+beta); + dzdph[0] = 1.0; + dzdph[1] = 0.0; + dzdph[2] = 0.0; + dzdth[0] = 0.0; + dzdth[1] = -1.0; + dzdth[2] = 0.0; + } + else + { + egy2 = exp(gamma*y2); + apby02py12 = alpha+beta*y02py12; + amby02py12 = alpha-beta*y02py12; + iapby02py12 = 1.0/apby02py12; + iapby02py122 = iapby02py12*iapby02py12; + igapby02py12 = iapby02py12/gamma; + igapby02py122 = igapby02py12*igapby02py12; + ambogapb = (alpha-beta)/(gamma*(alpha+beta)); + egy2apby02py12 = egy2*apby02py12; + egy2amby02py12 = egy2*amby02py12; + tbegy2 = 2.0*beta*egy2; + tbegy2y0dy0dphpy1dy1dph = tbegy2*y0dy0dphpy1dy1dph; + tbegy2y0dy0dthpy1dy1dth = tbegy2*y0dy0dthpy1dy1dth; + gigapby02py122 = gamma*igapby02py122; + gegy2amby02py12 = gamma*egy2amby02py12; + + z[0] = y0*egy2*iapby02py12; + z[1] = y1*egy2*iapby02py12; + z[2] = egy2amby02py12*igapby02py12-ambogapb; + dzdph[0] = ((y0*gamma*dydph[2]+dydph[0])*egy2apby02py12- + y0*tbegy2y0dy0dphpy1dy1dph)*iapby02py122; + dzdph[1] = ((y1*gamma*dydph[2]+dydph[1])*egy2apby02py12- + y1*tbegy2y0dy0dphpy1dy1dph)*iapby02py122; + dzdph[2] = (((gegy2amby02py12*dydph[2]-tbegy2y0dy0dphpy1dy1dph)* + apby02py12-tbegy2y0dy0dphpy1dy1dph*amby02py12)* + gigapby02py122); + dzdth[0] = ((y0*gamma*dydth[2]+dydth[0])*egy2apby02py12- + y0*tbegy2y0dy0dthpy1dy1dth)*iapby02py122; + dzdth[1] = ((y1*gamma*dydth[2]+dydth[1])*egy2apby02py12- + y1*tbegy2y0dy0dthpy1dy1dth)*iapby02py122; + dzdth[2] = (((gegy2amby02py12*dydth[2]-tbegy2y0dy0dthpy1dy1dth)* + apby02py12-tbegy2y0dy0dthpy1dy1dth*amby02py12)* + gigapby02py122); + } + + /* The same formulas written out in full glory: + z[0] = (y[0]*exp(gamma*y[2]))/(alpha+beta*(ipow(y[0],2)+ipow(y[1],2))); + z[1] = (y[1]*exp(gamma*y[2]))/(alpha+beta*(ipow(y[0],2)+ipow(y[1],2))); + z[2] = ((exp(gamma*y[2])*(alpha-beta*(ipow(y[0],2)+ipow(y[1],2))))/ + (gamma*(alpha+beta*(ipow(y[0],2)+ipow(y[1],2))))- + ((alpha-beta)/(gamma*(alpha+beta)))); + dzdph[0] = (((exp(gamma*y[2])*(gamma*y[0]*dydph[2]+dydph[0])* + (alpha+beta*(ipow(y[0],2)+ipow(y[1],2))))- + (2.0*beta*exp(gamma*y[2])*y[0]* + (y[0]*dydph[0]+y[1]*dydph[1])))/ + ipow(alpha+beta*(ipow(y[0],2)+ipow(y[1],2)),2)); + dzdph[1] = (((exp(gamma*y[2])*(gamma*y[1]*dydph[2]+dydph[1])* + (alpha+beta*(ipow(y[0],2)+ipow(y[1],2))))- + (2.0*beta*exp(gamma*y[2])*y[1]* + (y[0]*dydph[0]+y[1]*dydph[1])))/ + ipow(alpha+beta*(ipow(y[0],2)+ipow(y[1],2)),2)); + dzdph[2] = (((gamma*exp(gamma*y[2])* + (alpha-beta*(ipow(y[0],2)+ipow(y[1],2)))*dydph[2]- + 2.0*beta*exp(gamma*y[2])*(y[0]*dydph[0]+y[1]*dydph[1]))* + (gamma*(alpha+beta*(ipow(y[0],2)+ipow(y[1],2))))- + (2.0*gamma*beta*exp(gamma*y[2])* + (alpha-beta*(ipow(y[0],2)+ipow(y[1],2)))* + (y[0]*dydph[0]+y[1]*dydph[1])))/ + ipow(gamma*(alpha+beta*(ipow(y[0],2)+ipow(y[1],2))),2)); + dzdth[0] = (((exp(gamma*y[2])*(gamma*y[0]*dydth[2]+dydth[0])* + (alpha+beta*(ipow(y[0],2)+ipow(y[1],2))))- + (2.0*beta*exp(gamma*y[2])*y[0]* + (y[0]*dydth[0]+y[1]*dydth[1])))/ + ipow(alpha+beta*(ipow(y[0],2)+ipow(y[1],2)),2)); + dzdth[1] = (((exp(gamma*y[2])*(gamma*y[1]*dydth[2]+dydth[1])* + (alpha+beta*(ipow(y[0],2)+ipow(y[1],2))))- + (2.0*beta*exp(gamma*y[2])*y[1]* + (y[0]*dydth[0]+y[1]*dydth[1])))/ + ipow(alpha+beta*(ipow(y[0],2)+ipow(y[1],2)),2)); + dzdth[2] = (((gamma*exp(gamma*y[2])* + (alpha-beta*(ipow(y[0],2)+ipow(y[1],2)))*dydth[2]- + 2.0*beta*exp(gamma*y[2])*(y[0]*dydth[0]+y[1]*dydth[1]))* + (gamma*(alpha+beta*(ipow(y[0],2)+ipow(y[1],2))))- + (2.0*gamma*beta*exp(gamma*y[2])* + (alpha-beta*(ipow(y[0],2)+ipow(y[1],2)))* + (y[0]*dydth[0]+y[1]*dydth[1])))/ + ipow(gamma*(alpha+beta*(ipow(y[0],2)+ipow(y[1],2))),2)); + */ + } + else + { + iy02py12 = 1.0/y02py12; + iy02py122 = iy02py12*iy02py12; + ty0dy0dphpy1dy1dph = 2.0*y0dy0dphpy1dy1dph; + ty0dy0dthpy1dy1dth = 2.0*y0dy0dthpy1dy1dth; + + z[0] = y0*iy02py12; + z[1] = y1*iy02py12; + z[2] = -y2; + + /* We compute the surface normal vector based on the cross product + of the partial derivative vectors in bednorz_point_normal. For the + north and south poles, the partial derivative vectors are linearly + dependent and thus don't yield a useful normal vector. Therefore, + we have to include a special treatment for the two poles. */ + if (fabs(theta-M_PI/2.0) <= 1.0e-4) + { + dzdph[0] = 1.0; + dzdph[1] = 0.0; + dzdph[2] = 0.0; + dzdth[0] = 0.0; + dzdth[1] = 1.0; + dzdth[2] = 0.0; + } + else if (fabs(theta+M_PI/2.0) <= 1.0e-4) + { + dzdph[0] = 1.0; + dzdph[1] = 0.0; + dzdph[2] = 0.0; + dzdth[0] = 0.0; + dzdth[1] = -1.0; + dzdth[2] = 0.0; + } + else + { + dzdph[0] = (dydph[0]*y02py12-y0*ty0dy0dphpy1dy1dph)*iy02py122; + dzdph[1] = (dydph[1]*y02py12-y1*ty0dy0dphpy1dy1dph)*iy02py122; + dzdph[2] = -dydph[2]; + dzdth[0] = (dydth[0]*y02py12-y0*ty0dy0dthpy1dy1dth)*iy02py122; + dzdth[1] = (dydth[1]*y02py12-y1*ty0dy0dthpy1dy1dth)*iy02py122; + dzdth[2] = -dydth[2]; + } + + /* The same formulas written out in full glory: + z[0] = y[0]/(ipow(y[0],2)+ipow(y[1],2)); + z[1] = y[1]/(ipow(y[0],2)+ipow(y[1],2)); + z[2] = -y[2]; + dzdph[0] = ((dydph[0]*(ipow(y[0],2)+ipow(y[1],2))- + 2.0*y[0]*(y[0]*dydph[0]+y[1]*dydph[1]))/ + ipow(ipow(y[0],2)+ipow(y[1],2),2)); + dzdph[1] = ((dydph[1]*(ipow(y[0],2)+ipow(y[1],2))- + 2.0*y[1]*(y[0]*dydph[0]+y[1]*dydph[1]))/ + ipow(ipow(y[0],2)+ipow(y[1],2),2)); + dzdph[2] = -dydph[2]; + dzdth[0] = ((dydth[0]*(ipow(y[0],2)+ipow(y[1],2))- + 2.0*y[0]*(y[0]*dydth[0]+y[1]*dydth[1]))/ + ipow(ipow(y[0],2)+ipow(y[1],2),2)); + dzdth[1] = ((dydth[1]*(ipow(y[0],2)+ipow(y[1],2))- + 2.0*y[1]*(y[0]*dydth[0]+y[1]*dydth[1]))/ + ipow(ipow(y[0],2)+ipow(y[1],2),2)); + dzdth[2] = -dydth[2]; + */ + } +} + + +/* Compute a point p and its surface normal n in the Bednorz sphere + eversion based on the sphere parameters phi (longitude) and theta + (latitude) and the shape parameters bsp. */ +static void inline bednorz_point_normal(double phi, double theta, + bednorz_shape_par *bsp, + float p[3], float n[3]) +{ + double z[3], dzdph[3], dzdth[3]; + float a[3], b[3], t; + float lambda, eps, oz; + int i; + + bednorz_get_p2(phi,theta,bsp,z,dzdph,dzdth); + + for (i=0; i<3; i++) + { + p[i] = z[i]; + a[i] = dzdph[i]; + b[i] = dzdth[i]; + } + + /* In the original version of the Bednorz sphere eversion, the regions + around the north and south poles of the sphere are deformed to points + that lie very close to each other. This leads to a significant amount + of z fighting, especially for higher eversion orders, which is visually + unpleasant. Therefore, we modify the shape of the deformed sphere very + slightly to avoid or at least ameliorate the z fighting. */ + lambda = bsp->lambda; + eps = bsp->eps; + if (lambda == 1.0) + oz = eps*sin(theta); + else + oz = 0.0f; + p[2] += oz; + + cross(a,b,n); + t = 1.0f/sqrtf(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]); + n[0] *= t; + n[1] *= t; + n[2] *= t; +} + + +/* Set up the surface colors for the main pass (i.e., index 0). */ +static void setup_surface_colors(ModeInfo *mi, float phi_min, float phi_max, + float theta_min, float theta_max, + int num_phi, int num_theta) +{ + int i, j, o; + float phi, theta, phi_range, theta_range; + sphereeversionstruct *se = &sphereeversion[MI_SCREEN(mi)]; + static const float matc[3][3] = { + { 0.577350269f, -0.577350269f, 0.577350269f }, + { 0.211324865f, 0.788675135f, 0.577350269f }, + { -0.788675135f, -0.211324865f, 0.577350269f } + }; + + if (se->colors[0] != COLORS_TWOSIDED && se->colors[0] != COLORS_EARTH) + { + phi_range = phi_max-phi_min; + theta_range = theta_max-theta_min; + for (j=0; j<=num_phi; j++) + { + phi = phi_range*j/num_phi+phi_min; + for (i=0; i<=num_theta; i++) + { + o = j*(num_theta+1)+i; + theta = theta_range*i/num_theta+theta_min; + if (se->colors[0] == COLORS_PARALLEL) + color(se,(2.0f*theta+3.0f*M_PI_F/4.0f)*(2.0f/3.0f),matc, + &se->colf[0][4*o],&se->colb[0][4*o]); + else /* se->colors[0] == COLORS_MERIDIAN */ + color(se,phi,matc,&se->colf[0][4*o],&se->colb[0][4*o]); + } + } + } +#ifdef VERTEXATTRIBARRAY_WORKAROUND + else /* se->colors[0] == COLORS_TWOSIDED || se->colors[0] == COLORS_EARTH*/ + { + /* For some strange reason, the color buffer must be initialized + and used on macOS. Otherwise two-sided lighting will not + work. */ + int k; + for (j=0; j<=num_phi; j++) + { + for (i=0; i<=num_theta; i++) + { + o = j*(num_theta+1)+i; + for (k=0; k<4; k++) + { + se->colf[0][4*o+k] = 1.0f; + se->colb[0][4*o+k] = 1.0f; + } + } + } + } +#endif /* VERTEXATTRIBARRAY_WORKAROUND */ + +#ifdef HAVE_GLSL + if (se->use_shaders) + { + glBindBuffer(GL_ARRAY_BUFFER,se->vertex_colorf_buffer[0]); + glBufferData(GL_ARRAY_BUFFER, + 4*(num_phi+1)*(num_theta+1)*sizeof(GLfloat), + se->colf[0],GL_STATIC_DRAW); + glBindBuffer(GL_ARRAY_BUFFER,0); + + glBindBuffer(GL_ARRAY_BUFFER,se->vertex_colorb_buffer[0]); + glBufferData(GL_ARRAY_BUFFER, + 4*(num_phi+1)*(num_theta+1)*sizeof(GLfloat), + se->colb[0],GL_STATIC_DRAW); + glBindBuffer(GL_ARRAY_BUFFER,0); + } +#endif /* HAVE_GLSL */ +} + + +#ifdef HAVE_GLSL + +/* Set up the texture coordinates. */ +static void setup_tex_coords(ModeInfo *mi, float phi_min, float phi_max, + float theta_min, float theta_max, + int num_phi, int num_theta) +{ + int i, j, o; + float phi, theta, phi_range, theta_range, phi_scale, theta_scale; + sphereeversionstruct *se = &sphereeversion[MI_SCREEN(mi)]; + + phi_range = phi_max-phi_min; + theta_range = theta_max-theta_min; + phi_scale = 0.5f/M_PI_F; + theta_scale = 1.0f/M_PI_F; + for (j=0; j<=num_phi; j++) + { + phi = phi_range*j/num_phi+phi_min; + for (i=0; i<=num_theta; i++) + { + o = j*(num_theta+1)+i; + theta = theta_range*i/num_theta+theta_min; + se->tex[2*o+0] = phi_scale*phi+0.5f; + se->tex[2*o+1] = theta_scale*theta+0.5f; + } + } + + if (se->use_shaders) + { + glBindBuffer(GL_ARRAY_BUFFER,se->vertex_tex_coord_buffer); + glBufferData(GL_ARRAY_BUFFER, + 2*(num_phi+1)*(num_theta+1)*sizeof(GLfloat), + se->tex,GL_STATIC_DRAW); + glBindBuffer(GL_ARRAY_BUFFER,0); + } +} + +#endif /* HAVE_GLSL */ + + +/* Draw the Bednorz sphere eversion using OpenGL's fixed + functionality. */ +static int bednorz_sphere_eversion_ff(ModeInfo *mi, float phi_min, + float phi_max, float theta_min, + float theta_max, int num_phi, + int num_theta, int numb_dist, + int numb_dir, int num_grid) +{ + static const GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 1.0 }; + static const GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; + static const GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 }; + static const GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; + static const GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; + static const GLfloat mat_diff_front[] = { 1.0, 0.0, 0.0, 1.0 }; + static const GLfloat mat_diff_back[] = { 0.0, 1.0, 0.0, 1.0 }; + static const GLfloat mat_diff_trans_front[] = { 1.0, 0.0, 0.0, 0.7 }; + static const GLfloat mat_diff_trans_back[] = { 0.0, 1.0, 0.0, 0.7 }; + float p[3], n[3], mat[3][3]; + int i, j, k, l, m, o; + int numb_dist_mask, numb_dist_min, numb_dist_max; + int numb_dir_mask, numb_dir_min, numb_dir_max; + float phi, theta, phi_range, theta_range; + float *xx, *xn, *cf, *cb; + float a, b, c, d, e, tau, tau_min, tau_max, r, s; + float x, y, z, zmin, zmax, rmax, scale, offset_z; + bednorz_shape_par bsp; + float qu[4], r1[3][3], r2[3][3]; + sphereeversionstruct *se = &sphereeversion[MI_SCREEN(mi)]; + int polys; + + tau = se->tau; + /* Apply easing functions to the different ranges of tau. */ + if (fabsf(tau) <= BEDNORZ_TAU4) + { + if (fabsf(tau) <= BEDNORZ_TAU1) + { + tau_min = 0.0f; + tau_max = BEDNORZ_TAU1; + } + else + if (fabsf(tau) <= BEDNORZ_TAU2) + { + tau_min = BEDNORZ_TAU1; + tau_max = BEDNORZ_TAU2; + } + else if (fabsf(tau) <= BEDNORZ_TAU3) + { + tau_min = BEDNORZ_TAU2; + tau_max = BEDNORZ_TAU3; + } + else /* fabsf(tau) <= BEDNORZ_TAU4 */ + { + tau_min = BEDNORZ_TAU3; + tau_max = BEDNORZ_TAU4; + } + e = 1.0f/(tau_min*tau_min-2.0f*tau_min*tau_max+tau_max*tau_max); + a = -2.0f*e; + b = 3.0f*(tau_min+tau_max)*e; + c = -6.0f*tau_min*tau_max*e; + d = tau_min*tau_max*(tau_min+tau_max)*e; + if (tau >= 0.0f) + tau = ((a*tau+b)*tau+c)*tau+d; + else + tau = ((a*tau-b)*tau+c)*tau-d; + } + /* Set up the shape parameters. */ + bsp.n = se->g; + bsp.kappa = bednorz_get_kappa(bsp.n); + bsp.omega = BEDNORZ_OMEGA; + bsp.t = bednorz_get_t(tau); + bsp.p = bednorz_get_p(tau); + bsp.q = bednorz_get_q(tau); + bsp.xi = bednorz_get_xi(tau); + bsp.eta = bednorz_get_eta(tau,se->eta_min); + bsp.alpha = bednorz_get_alpha(tau); + bsp.beta = bednorz_get_beta(tau,se->beta_max); + bsp.gamma = bednorz_get_gamma(bsp.alpha,bsp.beta); + bsp.lambda = bednorz_get_lambda(tau); + bsp.eps = bednorz_get_eps(tau,bsp.n); + + /* Compute the surface points and normals. */ + phi_range = phi_max-phi_min; + theta_range = theta_max-theta_min; + for (j=0; j<=num_phi; j++) + { + phi = phi_range*j/num_phi+phi_min; + for (i=0; i<=num_theta; i++) + { + o = j*(num_theta+1)+i; + theta = theta_range*i/num_theta+theta_min; + bednorz_point_normal(phi,theta,&bsp,&se->sp[3*o],&se->sn[3*o]); + } + } + + /* Compute the z offset. */ + zmin = FLT_MAX; + zmax = -FLT_MAX; + for (j=0; j<=num_phi; j++) + { + for (i=0; i<=num_theta; i++) + { + o = j*(num_theta+1)+i; + z = se->sp[3*o+2]; + if (z < zmin) + zmin = z; + if (z > zmax) + zmax = z; + } + } + offset_z = -0.5f*(zmin+zmax); + + /* Shift the surface in the z direction and compute the scale. */ + rmax = -FLT_MAX; + for (j=0; j<=num_phi; j++) + { + for (i=0; i<=num_theta; i++) + { + o = j*(num_theta+1)+i; + se->sp[3*o+2] += offset_z; + x = se->sp[3*o]; + y = se->sp[3*o+1]; + z = se->sp[3*o+2]; + r = x*x+y*y+z*z; + if (r > rmax) + rmax = r; + } + } + scale = 0.75f/sqrtf(rmax); + + /* Scale the surface. */ + for (j=0; j<=num_phi; j++) + { + for (i=0; i<=num_theta; i++) + { + o = j*(num_theta+1)+i; + se->sp[3*o] *= scale; + se->sp[3*o+1] *= scale; + se->sp[3*o+2] *= scale; + } + } + + /* Compute the rotation that rotates the surface in 3D, including the + trackball rotations. */ + rotateall(se->alpha,se->beta,se->delta,r1); + + gltrackball_get_quaternion(se->trackball,qu); + quat_to_rotmat(qu,r2); + + mult_rotmat(r2,r1,mat); + + numb_dist_mask = numb_dist-1; + numb_dist_min = numb_dist/4; + numb_dist_max = 3*numb_dist/4; + numb_dir_mask = numb_dir-1; + numb_dir_min = numb_dir/4; + numb_dir_max = 3*numb_dir/4; + + glClearColor(0.0f,0.0f,0.0f,1.0f); + glClearDepth(1.0f); + glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + if (se->projection == DISP_PERSPECTIVE) + { + gluPerspective(60.0,se->aspect,0.1,10.0); + } + else + { + if (se->aspect >= 1.0) + glOrtho(-se->aspect,se->aspect,-1.0,1.0,0.1,10.0); + else + glOrtho(-1.0,1.0,-1.0/se->aspect,1.0/se->aspect,0.1,10.0); + } + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + if (se->display_mode[0] == DISP_SURFACE) + { + glDisable(GL_CULL_FACE); + glEnable(GL_DEPTH_TEST); + glDepthFunc(GL_LESS); + glShadeModel(GL_SMOOTH); + glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); + glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_TRUE); + glEnable(GL_LIGHTING); + glEnable(GL_LIGHT0); + glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient); + glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse); + glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular); + glLightfv(GL_LIGHT0,GL_POSITION,light_position); + glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,mat_specular); + glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,50.0); + glDepthMask(GL_TRUE); + glDisable(GL_BLEND); + } + else /* se->display_mode[0] == DISP_TRANSPARENT */ + { + glDisable(GL_CULL_FACE); + glDisable(GL_DEPTH_TEST); + glShadeModel(GL_SMOOTH); + glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); + glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_TRUE); + glEnable(GL_LIGHTING); + glEnable(GL_LIGHT0); + glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient); + glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse); + glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular); + glLightfv(GL_LIGHT0,GL_POSITION,light_position); + glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,mat_specular); + glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,50.0); + glDepthMask(GL_FALSE); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA,GL_ONE); + } + + if (se->colors[0] == COLORS_TWOSIDED || se->colors[0] == COLORS_EARTH) + { + glColor3fv(mat_diff_front); + if (se->display_mode[0] == DISP_TRANSPARENT) + { + glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,mat_diff_trans_front); + glMaterialfv(GL_BACK,GL_AMBIENT_AND_DIFFUSE,mat_diff_trans_back); + } + else + { + glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,mat_diff_front); + glMaterialfv(GL_BACK,GL_AMBIENT_AND_DIFFUSE,mat_diff_back); + } + } + glEnable(GL_POLYGON_OFFSET_FILL); + glPolygonOffset(1.0f,1.0f); + + if (se->appearance[0] == APPEARANCE_PARALLEL_BANDS) + { + for (i=0; i= numb_dist_min) && + ((i & numb_dist_mask) < numb_dist_max)) + continue; + glBegin(GL_TRIANGLE_STRIP); + for (j=num_phi; j>=0; j--) + { + for (k=0; k<=1; k++) + { + l = i+k; + m = j; + o = m*(num_theta+1)+l; + phi = phi_range*m/num_phi+phi_min; + theta = theta_range*l/num_theta+theta_min; + xx = &se->sp[3*o]; + xn = &se->sn[3*o]; + for (l=0; l<3; l++) + { + r = 0.0f; + s = 0.0f; + for (m=0; m<3; m++) + { + r += mat[l][m]*xx[m]; + s += mat[l][m]*xn[m]; + } + p[l] = r+se->offset3d[l]; + n[l] = s; + } + if (se->colors[0] != COLORS_TWOSIDED && + se->colors[0] != COLORS_EARTH) + { + cf = &se->colf[0][4*o]; + cb = &se->colb[0][4*o]; + glColor3fv(cf); + glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,cf); + glMaterialfv(GL_BACK,GL_AMBIENT_AND_DIFFUSE,cb); + } + glNormal3fv(n); + glVertex3fv(p); + } + } + glEnd(); + } + polys = num_theta*(num_phi+1); + } + else /* se->appearance[0] != APPEARANCE_PARALLEL_BANDS */ + { + for (j=0; jappearance[0] == APPEARANCE_MERIDIAN_BANDS && + ((j & numb_dir_mask) >= numb_dir_min) && + ((j & numb_dir_mask) < numb_dir_max)) + continue; + glBegin(GL_TRIANGLE_STRIP); + for (i=0; i<=num_theta; i++) + { + for (k=0; k<=1; k++) + { + l = i; + m = j+k; + o = m*(num_theta+1)+l; + phi = phi_range*m/num_phi+phi_min; + theta = theta_range*l/num_theta+theta_min; + xx = &se->sp[3*o]; + xn = &se->sn[3*o]; + for (l=0; l<3; l++) + { + r = 0.0f; + s = 0.0f; + for (m=0; m<3; m++) + { + r += mat[l][m]*xx[m]; + s += mat[l][m]*xn[m]; + } + p[l] = r+se->offset3d[l]; + n[l] = s; + } + if (se->colors[0] != COLORS_TWOSIDED && + se->colors[0] != COLORS_EARTH) + { + cf = &se->colf[0][4*o]; + cb = &se->colb[0][4*o]; + glColor3fv(cf); + glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,cf); + glMaterialfv(GL_BACK,GL_AMBIENT_AND_DIFFUSE,cb); + } + glNormal3fv(n); + glVertex3fv(p); + } + } + glEnd(); + } + polys = 2*num_phi*(num_theta+1); + if (se->appearance[0] == APPEARANCE_MERIDIAN_BANDS) + polys /= 2; + } + + glDisable(GL_POLYGON_OFFSET_FILL); + glPolygonOffset(0.0f,0.0f); + if (se->graticule[0]) + { + glColor4f(1.0f,1.0f,1.0f,1.0f); + glLineWidth(2.0f); + glEnable(GL_LINE_SMOOTH); + glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); + glDisable(GL_LIGHTING); + glDisable(GL_LIGHT0); + glEnable(GL_BLEND); + glHint(GL_LINE_SMOOTH_HINT,GL_DONT_CARE); + /* Draw meridians. */ + for (j=0; jsp[3*o]; + for (l=0; l<3; l++) + { + r = 0.0f; + for (m=0; m<3; m++) + r += mat[l][m]*xx[m]; + p[l] = r+se->offset3d[l]; + } + glVertex3fv(p); + } + glEnd(); + } + /* Draw parallels. */ + for (i=num_grid; i<=num_theta-num_grid; i+=num_grid) + { + glBegin(GL_LINE_LOOP); + for (j=num_phi-1; j>=0; j--) + { + o = j*(num_theta+1)+i; + phi = phi_range*j/num_phi+phi_min; + theta = theta_range*i/num_theta+theta_min; + xx = &se->sp[3*o]; + for (l=0; l<3; l++) + { + r = 0.0f; + for (m=0; m<3; m++) + r += mat[l][m]*xx[m]; + p[l] = r+se->offset3d[l]; + } + glVertex3fv(p); + } + glEnd(); + } + glLineWidth(1.0f); + glPolygonOffset(0.0f,0.0f); + glDisable(GL_LINE_SMOOTH); + glBlendFunc(GL_SRC_ALPHA,GL_ONE); + glEnable(GL_LIGHTING); + glEnable(GL_LIGHT0); + if (se->display_mode[0] != DISP_TRANSPARENT) + glDisable(GL_BLEND); + } + + return polys; +} + + +#ifdef HAVE_GLSL + +/* Draw the Bednorz sphere eversion using OpenGL's programmable + functionality. */ +static int bednorz_sphere_eversion_pf(ModeInfo *mi, float phi_min, + float phi_max, float theta_min, + float theta_max, int num_phi, + int num_theta, int numb_dist, + int numb_dir, int num_grid) +{ + static const GLfloat light_model_ambient[] = { 0.2, 0.2, 0.2, 1.0 }; + static const GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 1.0 }; + static const GLfloat light_ambient_earth[] = { 0.3, 0.3, 0.3, 1.0 }; + static const GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; + static const GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 }; + static const GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; + static const GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; + static const GLfloat mat_diff_front[] = { 1.0, 0.0, 0.0, 1.0 }; + static const GLfloat mat_diff_back[] = { 0.0, 1.0, 0.0, 1.0 }; + static const GLfloat mat_diff_trans_front[] = { 1.0, 0.0, 0.0, 0.7 }; + static const GLfloat mat_diff_trans_back[] = { 0.0, 1.0, 0.0, 0.7 }; + static const GLfloat mat_diff_white[] = { 1.0, 1.0, 1.0, 1.0 }; + static const GLfloat mat_diff_white_trans[] = { 1.0, 1.0, 1.0, 0.7 }; + static const GLuint blend_indices[6] = { 0, 1, 2, 2, 3, 0 }; + static const GLfloat blend_p[4][2] = + { { -1.0, -1.0 }, { 1.0, -1.0 }, { 1.0, 1.0 }, { -1.0, 1.0 } }; + static const GLfloat blend_t[4][2] = + { { 0.0, 0.0 }, { 1.0, 0.0 }, { 1.0, 1.0 }, { 0.0, 1.0 } }; + GLfloat light_direction[3], half_vector[3], len; + GLfloat p_mat[16], mv_mat[16], rot_mat[16]; + float mat[3][3]; + int i, j, k, l, m, o, pass, num_passes, ni; + int numb_dist_mask, numb_dist_min, numb_dist_max; + int numb_dir_mask, numb_dir_min, numb_dir_max; + float phi, theta, phi_range, theta_range; + float a, b, c, d, e, tau, tau_min, tau_max, r, t; + float x, y, z, zmin, zmax, rmax, scale, offset_z; + bednorz_shape_par bsp; + float qu[4], r1[3][3], r2[3][3]; + GLint draw_buf, read_buf; + GLsizeiptr index_offset; + sphereeversionstruct *se = &sphereeversion[MI_SCREEN(mi)]; + int polys = 0; + + if (!se->use_shaders) + return 0; + + numb_dist_mask = numb_dist-1; + numb_dist_min = numb_dist/4; + numb_dist_max = 3*numb_dist/4; + numb_dir_mask = numb_dir-1; + numb_dir_min = numb_dir/4; + numb_dir_max = 3*numb_dir/4; + + if (!se->buffers_initialized) + { + /* The indices only need to be computed once. */ + /* Compute the solid indices. */ + ni = 0; + se->num_solid_strips = 0; + se->num_solid_triangles = 0; + for (j=0; jsolid_indices[ni++] = o; + } + } + se->num_solid_strips++; + } + se->num_solid_triangles = 2*(num_theta+1); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,se->solid_indices_buffer); + glBufferData(GL_ELEMENT_ARRAY_BUFFER,ni*sizeof(GLuint), + se->solid_indices,GL_STATIC_DRAW); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0); + + /* Compute the meridian indices. */ + ni = 0; + se->num_meridian_strips = 0; + se->num_meridian_triangles = 0; + for (j=0; j= numb_dir_min) && + ((j & numb_dir_mask) < numb_dir_max)) + continue; + for (i=0; i<=num_theta; i++) + { + for (k=0; k<=1; k++) + { + l = i; + m = j+k; + o = m*(num_theta+1)+l; + se->meridian_indices[ni++] = o; + } + } + se->num_meridian_strips++; + } + se->num_meridian_triangles = 2*(num_theta+1); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,se->meridian_indices_buffer); + glBufferData(GL_ELEMENT_ARRAY_BUFFER,ni*sizeof(GLuint), + se->meridian_indices,GL_STATIC_DRAW); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0); + + /* Compute the parallel indices. */ + ni = 0; + se->num_parallel_strips = 0; + se->num_parallel_triangles = 0; + for (i=0; i= numb_dist_min) && + ((i & numb_dist_mask) < numb_dist_max)) + continue; + for (j=num_phi; j>=0; j--) + { + for (k=0; k<=1; k++) + { + l = i+k; + m = j; + o = m*(num_theta+1)+l; + se->parallel_indices[ni++] = o; + } + } + se->num_parallel_strips++; + } + se->num_parallel_triangles = 2*(num_phi+1); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,se->parallel_indices_buffer); + glBufferData(GL_ELEMENT_ARRAY_BUFFER,ni*sizeof(GLuint), + se->parallel_indices,GL_STATIC_DRAW); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0); + + /* Compute the line indices. */ + ni = 0; + for (j=0; jline_indices[ni++] = j*(num_theta+1)+i; + se->line_indices[ni++] = j*(num_theta+1)+i+1; + } + } + for (i=num_grid; i<=num_theta-num_grid; i+=num_grid) + { + for (j=num_phi; j>0; j--) + { + o = j*(num_theta+1)+i; + se->line_indices[ni++] = j*(num_theta+1)+i; + se->line_indices[ni++] = (j-1)*(num_theta+1)+i; + } + } + se->num_lines = ni; + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,se->line_indices_buffer); + glBufferData(GL_ELEMENT_ARRAY_BUFFER,ni*sizeof(GLuint), + se->line_indices,GL_STATIC_DRAW); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0); + + se->buffers_initialized = True; + } + + tau = se->tau; + /* Apply easing functions to the different ranges of tau. */ + if (fabsf(tau) <= BEDNORZ_TAU4) + { + if (fabsf(tau) <= BEDNORZ_TAU1) + { + tau_min = 0.0f; + tau_max = BEDNORZ_TAU1; + } + else + if (fabsf(tau) <= BEDNORZ_TAU2) + { + tau_min = BEDNORZ_TAU1; + tau_max = BEDNORZ_TAU2; + } + else if (fabsf(tau) <= BEDNORZ_TAU3) + { + tau_min = BEDNORZ_TAU2; + tau_max = BEDNORZ_TAU3; + } + else /* fabsf(tau) <= BEDNORZ_TAU4 */ + { + tau_min = BEDNORZ_TAU3; + tau_max = BEDNORZ_TAU4; + } + e = 1.0f/(tau_min*tau_min-2.0f*tau_min*tau_max+tau_max*tau_max); + a = -2.0f*e; + b = 3.0f*(tau_min+tau_max)*e; + c = -6.0f*tau_min*tau_max*e; + d = tau_min*tau_max*(tau_min+tau_max)*e; + if (tau >= 0.0f) + tau = ((a*tau+b)*tau+c)*tau+d; + else + tau = ((a*tau-b)*tau+c)*tau-d; + } + /* Set up the shape parameters. */ + bsp.n = se->g; + bsp.kappa = bednorz_get_kappa(bsp.n); + bsp.omega = BEDNORZ_OMEGA; + bsp.t = bednorz_get_t(tau); + bsp.p = bednorz_get_p(tau); + bsp.q = bednorz_get_q(tau); + bsp.xi = bednorz_get_xi(tau); + bsp.eta = bednorz_get_eta(tau,se->eta_min); + bsp.alpha = bednorz_get_alpha(tau); + bsp.beta = bednorz_get_beta(tau,se->beta_max); + bsp.gamma = bednorz_get_gamma(bsp.alpha,bsp.beta); + bsp.lambda = bednorz_get_lambda(tau); + bsp.eps = bednorz_get_eps(tau,bsp.n); + + /* Compute the surface points and normals. */ + phi_range = phi_max-phi_min; + theta_range = theta_max-theta_min; + for (j=0; j<=num_phi; j++) + { + phi = phi_range*j/num_phi+phi_min; + for (i=0; i<=num_theta; i++) + { + o = j*(num_theta+1)+i; + theta = theta_range*i/num_theta+theta_min; + bednorz_point_normal(phi,theta,&bsp,&se->sp[3*o],&se->sn[3*o]); + } + } + + /* Compute the z offset. */ + zmin = FLT_MAX; + zmax = -FLT_MAX; + for (j=0; j<=num_phi; j++) + { + for (i=0; i<=num_theta; i++) + { + o = j*(num_theta+1)+i; + z = se->sp[3*o+2]; + if (z < zmin) + zmin = z; + if (z > zmax) + zmax = z; + } + } + offset_z = -0.5f*(zmin+zmax); + + /* Shift the surface in the z direction and compute the scale. */ + rmax = -FLT_MAX; + for (j=0; j<=num_phi; j++) + { + for (i=0; i<=num_theta; i++) + { + o = j*(num_theta+1)+i; + se->sp[3*o+2] += offset_z; + x = se->sp[3*o]; + y = se->sp[3*o+1]; + z = se->sp[3*o+2]; + r = x*x+y*y+z*z; + if (r > rmax) + rmax = r; + } + } + scale = 0.75f/sqrtf(rmax); + + glBindBuffer(GL_ARRAY_BUFFER,se->vertex_pos_buffer); + glBufferData(GL_ARRAY_BUFFER,3*(num_phi+1)*(num_theta+1)*sizeof(GLfloat), + se->sp,GL_STREAM_DRAW); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0); + + glBindBuffer(GL_ARRAY_BUFFER,se->vertex_normal_buffer); + glBufferData(GL_ARRAY_BUFFER,3*(num_phi+1)*(num_theta+1)*sizeof(GLfloat), + se->sn,GL_STREAM_DRAW); + glBindBuffer(GL_ARRAY_BUFFER,0); + + /* Compute the rotation that rotates the surface in 3D, including the + trackball rotations. */ + rotateall(se->alpha,se->beta,se->delta,r1); + + gltrackball_get_quaternion(se->trackball,qu); + quat_to_rotmat(qu,r2); + + mult_rotmat(r2,r1,mat); + + glsl_Identity(p_mat); + if (se->projection == DISP_PERSPECTIVE) + { + glsl_Perspective(p_mat,60.0f,se->aspect,0.1f,10.0f); + } + else + { + if (se->aspect >= 1.0) + glsl_Orthographic(p_mat,-se->aspect,se->aspect,-1.0f,1.0f, + 0.1f,10.0f); + else + glsl_Orthographic(p_mat,-1.0f,1.0f,-1.0f/se->aspect,1.0f/se->aspect, + 0.1f,10.0f); + } + glsl_Identity(rot_mat); + for (i=0; i<3; i++) + for (j=0; j<3; j++) + rot_mat[GLSL__LINCOOR(i,j,4)] = mat[i][j]; + glsl_Identity(mv_mat); + glsl_Translate(mv_mat,se->offset3d[0],se->offset3d[1],se->offset3d[2]); + glsl_Scale(mv_mat,scale,scale,scale); + glsl_MultMatrix(mv_mat,rot_mat); + + len = sqrtf(light_position[0]*light_position[0]+ + light_position[1]*light_position[1]+ + light_position[2]*light_position[2]); + light_direction[0] = light_position[0]/len; + light_direction[1] = light_position[1]/len; + light_direction[2] = light_position[2]/len; + half_vector[0] = light_direction[0]; + half_vector[1] = light_direction[1]; + half_vector[2] = light_direction[2]+1.0f; + len = sqrtf(half_vector[0]*half_vector[0]+ + half_vector[1]*half_vector[1]+ + half_vector[2]*half_vector[2]); + half_vector[0] /= len; + half_vector[1] /= len; + half_vector[2] /= len; + + num_passes = se->anim_state == ANIM_TURN ? 2 : 1; + + for (pass=0; passpoly_shader_program); + + glClearColor(0.0f,0.0f,0.0f,1.0f); + glClearDepth(1.0f); + glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); + + glUniformMatrix4fv(se->poly_mv_index,1,GL_FALSE,mv_mat); + glUniformMatrix4fv(se->poly_proj_index,1,GL_FALSE,p_mat); + + glUniform4fv(se->poly_front_ambient_index,1,mat_diff_white); + glUniform4fv(se->poly_front_diffuse_index,1,mat_diff_white); + glUniform4fv(se->poly_back_ambient_index,1,mat_diff_white); + glUniform4fv(se->poly_back_diffuse_index,1,mat_diff_white); + glVertexAttrib4f(se->poly_colorf_index,1.0f,1.0f,1.0f,1.0f); + glVertexAttrib4f(se->poly_colorb_index,1.0f,1.0f,1.0f,1.0f); + + if (se->display_mode[pass] == DISP_SURFACE) + { + glDisable(GL_CULL_FACE); + glEnable(GL_DEPTH_TEST); + glDepthFunc(GL_LESS); + glDepthMask(GL_TRUE); + glDisable(GL_BLEND); + glUniform4fv(se->poly_glbl_ambient_index,1,light_model_ambient); + if (se->colors[pass] != COLORS_EARTH) + glUniform4fv(se->poly_lt_ambient_index,1,light_ambient); + else + glUniform4fv(se->poly_lt_ambient_index,1,light_ambient_earth); + glUniform4fv(se->poly_lt_diffuse_index,1,light_diffuse); + glUniform4fv(se->poly_lt_specular_index,1,light_specular); + glUniform3fv(se->poly_lt_direction_index,1,light_direction); + glUniform3fv(se->poly_lt_halfvect_index,1,half_vector); + glUniform4fv(se->poly_specular_index,1,mat_specular); + glUniform1f(se->poly_shininess_index,50.0f); + } + else /* se->display_mode[pass] == DISP_TRANSPARENT */ + { + glDisable(GL_CULL_FACE); + glDisable(GL_DEPTH_TEST); + glDepthMask(GL_FALSE); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA,GL_ONE); + glUniform4fv(se->poly_glbl_ambient_index,1,light_model_ambient); + if (se->colors[pass] != COLORS_EARTH) + glUniform4fv(se->poly_lt_ambient_index,1,light_ambient); + else + glUniform4fv(se->poly_lt_ambient_index,1,light_ambient_earth); + glUniform4fv(se->poly_lt_diffuse_index,1,light_diffuse); + glUniform4fv(se->poly_lt_specular_index,1,light_specular); + glUniform3fv(se->poly_lt_direction_index,1,light_direction); + glUniform3fv(se->poly_lt_halfvect_index,1,half_vector); + glUniform4fv(se->poly_specular_index,1,mat_specular); + glUniform1f(se->poly_shininess_index,50.0f); + } + + if (se->colors[pass] == COLORS_TWOSIDED) + { + if (se->display_mode[pass] == DISP_TRANSPARENT) + { + glUniform4fv(se->poly_front_ambient_index,1,mat_diff_trans_front); + glUniform4fv(se->poly_front_diffuse_index,1,mat_diff_trans_front); + glUniform4fv(se->poly_back_ambient_index,1,mat_diff_trans_back); + glUniform4fv(se->poly_back_diffuse_index,1,mat_diff_trans_back); + } + else + { + glUniform4fv(se->poly_front_ambient_index,1,mat_diff_front); + glUniform4fv(se->poly_front_diffuse_index,1,mat_diff_front); + glUniform4fv(se->poly_back_ambient_index,1,mat_diff_back); + glUniform4fv(se->poly_back_diffuse_index,1,mat_diff_back); + } + } + else if (se->colors[pass] == COLORS_EARTH) + { + if (se->display_mode[pass] == DISP_TRANSPARENT) + { + glUniform4fv(se->poly_front_ambient_index,1,mat_diff_white_trans); + glUniform4fv(se->poly_front_diffuse_index,1,mat_diff_white_trans); + glUniform4fv(se->poly_back_ambient_index,1,mat_diff_white_trans); + glUniform4fv(se->poly_back_diffuse_index,1,mat_diff_white_trans); + } + else + { + glUniform4fv(se->poly_front_ambient_index,1,mat_diff_white); + glUniform4fv(se->poly_front_diffuse_index,1,mat_diff_white); + glUniform4fv(se->poly_back_ambient_index,1,mat_diff_white); + glUniform4fv(se->poly_back_diffuse_index,1,mat_diff_white); + } + } + + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D,se->tex_names[0]); + glUniform1i(se->poly_tex_samp_f_index,0); + glActiveTexture(GL_TEXTURE1); + glBindTexture(GL_TEXTURE_2D,se->tex_names[1]); + glUniform1i(se->poly_tex_samp_b_index,1); + glActiveTexture(GL_TEXTURE2); + glBindTexture(GL_TEXTURE_2D,se->tex_names[2]); + glUniform1i(se->poly_tex_samp_w_index,2); + glUniform1i(se->poly_bool_textures_index,se->colors[pass] == COLORS_EARTH); + + glEnable(GL_POLYGON_OFFSET_FILL); + glPolygonOffset(1.0f,1.0f); + + glEnableVertexAttribArray(se->poly_pos_index); + glBindBuffer(GL_ARRAY_BUFFER,se->vertex_pos_buffer); + glVertexAttribPointer(se->poly_pos_index,3,GL_FLOAT,GL_FALSE,0,0); + + glEnableVertexAttribArray(se->poly_normal_index); + glBindBuffer(GL_ARRAY_BUFFER,se->vertex_normal_buffer); + glVertexAttribPointer(se->poly_normal_index,3,GL_FLOAT,GL_FALSE,0,0); + + glEnableVertexAttribArray(se->poly_vertex_tex_index); + glBindBuffer(GL_ARRAY_BUFFER,se->vertex_tex_coord_buffer); + glVertexAttribPointer(se->poly_vertex_tex_index,2,GL_FLOAT,GL_FALSE,0,0); + + if (se->colors[pass] != COLORS_TWOSIDED && + se->colors[pass] != COLORS_EARTH) + { + glEnableVertexAttribArray(se->poly_colorf_index); + glBindBuffer(GL_ARRAY_BUFFER,se->vertex_colorf_buffer[pass]); + glVertexAttribPointer(se->poly_colorf_index,4,GL_FLOAT,GL_FALSE,0,0); + + glEnableVertexAttribArray(se->poly_colorb_index); + glBindBuffer(GL_ARRAY_BUFFER,se->vertex_colorb_buffer[pass]); + glVertexAttribPointer(se->poly_colorb_index,4,GL_FLOAT,GL_FALSE,0,0); + } +#ifdef VERTEXATTRIBARRAY_WORKAROUND + else /* se->colors[pass] == COLORS_TWOSIDED || + se->colors[pass] == COLORS_EARTH */ + { + glEnableVertexAttribArray(se->poly_colorf_index); + glBindBuffer(GL_ARRAY_BUFFER,se->vertex_colorf_buffer[pass]); + glVertexAttribPointer(se->poly_colorf_index,4,GL_FLOAT,GL_FALSE,0,0); + + glEnableVertexAttribArray(se->poly_colorb_index); + glBindBuffer(GL_ARRAY_BUFFER,se->vertex_colorb_buffer[pass]); + glVertexAttribPointer(se->poly_colorb_index,4,GL_FLOAT,GL_FALSE,0,0); + } +#endif /* VERTEXATTRIBARRAY_WORKAROUND */ + + if (se->appearance[pass] == APPEARANCE_SOLID) + { + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,se->solid_indices_buffer); + for (i=0; inum_solid_strips; i++) + { + index_offset = se->num_solid_triangles*i*sizeof(GLuint); + glDrawElements(GL_TRIANGLE_STRIP,se->num_solid_triangles, + GL_UNSIGNED_INT,(const GLvoid *)index_offset); + } + polys += 2*num_phi*(num_theta+1); + } + else if (se->appearance[pass] == APPEARANCE_PARALLEL_BANDS) + { + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,se->parallel_indices_buffer); + for (i=0; inum_parallel_strips; i++) + { + index_offset = se->num_parallel_triangles*i*sizeof(GLuint); + glDrawElements(GL_TRIANGLE_STRIP,se->num_parallel_triangles, + GL_UNSIGNED_INT,(const GLvoid *)index_offset); + } + polys += num_theta*(num_phi+1); + } + else /* se->appearance[pass] == APPEARANCE_MERIDIAN_BANDS */ + { + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,se->meridian_indices_buffer); + for (i=0; inum_meridian_strips; i++) + { + index_offset = se->num_meridian_triangles*i*sizeof(GLuint); + glDrawElements(GL_TRIANGLE_STRIP,se->num_meridian_triangles, + GL_UNSIGNED_INT,(const GLvoid *)index_offset); + } + polys += num_phi*(num_theta+1); + } + + glDisableVertexAttribArray(se->poly_pos_index); + glDisableVertexAttribArray(se->poly_normal_index); + if (se->colors[pass] != COLORS_TWOSIDED && + se->colors[pass] != COLORS_EARTH) + { + glDisableVertexAttribArray(se->poly_colorf_index); + glDisableVertexAttribArray(se->poly_colorb_index); + } +#ifdef VERTEXATTRIBARRAY_WORKAROUND + else /* se->colors[pass] == COLORS_TWOSIDED || + se->colors[pass] == COLORS_EARTH */ + { + glDisableVertexAttribArray(se->poly_colorf_index); + glDisableVertexAttribArray(se->poly_colorb_index); + } +#endif /* VERTEXATTRIBARRAY_WORKAROUND */ + glBindBuffer(GL_ARRAY_BUFFER,0); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0); + + glDisable(GL_POLYGON_OFFSET_FILL); + glPolygonOffset(0.0f,0.0f); + + glUseProgram(0); + + if (se->graticule[pass]) + { + glUseProgram(se->line_shader_program); + + glUniformMatrix4fv(se->line_mv_index,1,GL_FALSE,mv_mat); + glUniformMatrix4fv(se->line_proj_index,1,GL_FALSE,p_mat); + glUniform4f(se->line_color_index,1.0f,1.0f,1.0f,1.0f); + + glLineWidth(2.0f); + + glEnableVertexAttribArray(se->line_pos_index); + glBindBuffer(GL_ARRAY_BUFFER,se->vertex_pos_buffer); + glVertexAttribPointer(se->line_pos_index,3,GL_FLOAT,GL_FALSE,0,0); + + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,se->line_indices_buffer); + + index_offset = 0; + glDrawElements(GL_LINES,se->num_lines,GL_UNSIGNED_INT, + (const void *)index_offset); + + glDisableVertexAttribArray(se->line_pos_index); + glBindBuffer(GL_ARRAY_BUFFER,0); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0); + + glUseProgram(0); + } + + if (num_passes == 2) + { + /* Copy the rendered image to a texture. */ + glGetIntegerv(GL_DRAW_BUFFER0,&draw_buf); + glGetIntegerv(GL_READ_BUFFER,&read_buf); + glReadBuffer(draw_buf); + glBindTexture(GL_TEXTURE_2D,se->color_textures[pass]); + glCopyTexSubImage2D(GL_TEXTURE_2D,0,0,0,0,0,se->WindW,se->WindH); + glReadBuffer(read_buf); + } + } + + if (num_passes == 2) + { + t = (float)se->turn_step/(float)se->num_turn; + /* Apply an easing function to t. */ + t = (3.0-2.0*t)*t*t; + + glUseProgram(se->blend_shader_program); + + glClearColor(0.0f,0.0f,0.0f,1.0f); + glClearDepth(1.0f); + glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); + + glDisable(GL_DEPTH_TEST); + glDepthMask(GL_FALSE); + glDisable(GL_BLEND); + + glUniform1f(se->blend_t_index,t); + + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D,se->color_textures[0]); + glUniform1i(se->blend_sampler0_index,0); + + glActiveTexture(GL_TEXTURE1); + glBindTexture(GL_TEXTURE_2D,se->color_textures[1]); + glUniform1i(se->blend_sampler1_index,1); + + glEnableVertexAttribArray(se->blend_vertex_p_index); + glVertexAttribPointer(se->blend_vertex_p_index,2,GL_FLOAT,GL_FALSE, + 2*sizeof(GLfloat),blend_p); + + glEnableVertexAttribArray(se->blend_vertex_t_index); + glVertexAttribPointer(se->blend_vertex_t_index,2,GL_FLOAT,GL_FALSE, + 2*sizeof(GLfloat),blend_t); + + glDrawElements(GL_TRIANGLES,6,GL_UNSIGNED_INT,blend_indices); + + glActiveTexture(GL_TEXTURE0); + + glUseProgram(0); + } + + return polys; +} + +#endif /* HAVE_GLSL */ + + +void init_sphereeversion_analytic(ModeInfo *mi) +{ + sphereeversionstruct *se = &sphereeversion[MI_SCREEN(mi)]; + + if (deform_speed == 0.0f) + deform_speed = 10.0f; + + se->alpha = frand(120.0)-60.0; + se->beta = frand(120.0)-60.0; + se->delta = frand(360.0); + + se->eta_min = BEDNORZ_ETA_MIN; + se->beta_max = BEDNORZ_BETA_MAX; + + se->anim_state = ANIM_DEFORM; + se->tau = BEDNORZ_TAU_MAX; + se->defdir = -1; + se->turn_step = 0; + se->num_turn = 0; + + se->offset3d[0] = 0.0f; + se->offset3d[1] = 0.0f; + se->offset3d[2] = -1.8f; + + se->sp = calloc(3*(NUMPH+1)*(NUMTH+1),sizeof(float)); + se->sn = calloc(3*(NUMPH+1)*(NUMTH+1),sizeof(float)); + se->colf[0] = calloc(4*(NUMPH+1)*(NUMTH+1),sizeof(float)); + se->colf[1] = calloc(4*(NUMPH+1)*(NUMTH+1),sizeof(float)); + se->colb[0] = calloc(4*(NUMPH+1)*(NUMTH+1),sizeof(float)); + se->colb[1] = calloc(4*(NUMPH+1)*(NUMTH+1),sizeof(float)); + +#ifdef HAVE_GLSL + se->solid_indices = calloc(2*NUMPH*(NUMTH+1),sizeof(float)); + se->parallel_indices = calloc(NUMPH*(NUMTH+1),sizeof(float)); + se->meridian_indices = calloc((NUMPH+1)*NUMTH,sizeof(float)); + se->line_indices = calloc(4*NUMPH*NUMTH/NUMGRID,sizeof(float)); + + init_glsl(mi); +#endif /* HAVE_GLSL */ + + setup_surface_colors(mi,-M_PI_F,M_PI_F,-M_PI_F/2.0f,M_PI_F/2.0f,NUMPH,NUMTH); +#ifdef HAVE_GLSL + se->tex = calloc(2*(NUMPH+1)*(NUMTH+1),sizeof(float)); + gen_textures(mi); + setup_tex_coords(mi,-M_PI_F,M_PI_F,-M_PI_F/2.0f,M_PI_F/2.0f,NUMPH,NUMTH); +#endif /* HAVE_GLSL */ +} + + +void display_sphereeversion_analytic(ModeInfo *mi) +{ + float alpha, beta, delta, dot, a, t, q[4]; + float *colt; + sphereeversionstruct *se = &sphereeversion[MI_SCREEN(mi)]; +#ifdef HAVE_GLSL + GLuint vertex_colort_buffer; +#endif /* HAVE_GLSL */ + + if (!se->button_pressed) + { + if (se->anim_state == ANIM_DEFORM) + { + se->tau += se->defdir*deform_speed*0.001; + if (se->tau < BEDNORZ_TAU_MIN) + { + se->tau = BEDNORZ_TAU_MIN; + se->defdir = -se->defdir; + se->anim_state = ANIM_TURN; + } + if (se->tau > BEDNORZ_TAU_MAX) + { + se->tau = BEDNORZ_TAU_MAX; + se->defdir = -se->defdir; + se->anim_state = ANIM_TURN; + } + if (se->anim_state == ANIM_TURN) + { + /* Convert the current rotation angles to a quaternion. */ + angles_to_quat(se->alpha,se->beta,se->delta,se->qs); + /* Determine random target rotation angles and convert them to the + target quaternion. */ + alpha = frand(120.0)-60.0; + beta = frand(120.0)-60.0; + delta = frand(360.0); + angles_to_quat(alpha,beta,delta,se->qe); + /* Compute the angle between qs and qe. */ + dot = (se->qs[0]*se->qe[0]+se->qs[1]*se->qe[1]+ + se->qs[2]*se->qe[2]+se->qs[3]*se->qe[3]); + if (dot < 0.0f) + { + se->qe[0] = -se->qe[0]; + se->qe[1] = -se->qe[1]; + se->qe[2] = -se->qe[2]; + se->qe[3] = -se->qe[3]; + dot = -dot; + } + a = 180.0f/M_PI_F*acosf(dot); + se->num_turn = ceilf(a/TURN_STEP); + + /* Change the parameters randomly after one full eversion when a + turn to the new orientation starts. */ + /* Copy the current display modes to the values of the second pass. */ + se->display_mode[1] = se->display_mode[0]; + se->appearance[1] = se->appearance[0]; + se->colors[1] = se->colors[0]; + se->graticule[1] = se->graticule[0]; + /* Swap the front and back color buffers. */ + colt = se->colf[1]; + se->colf[1] = se->colf[0]; + se->colf[0] = colt; + colt = se->colb[1]; + se->colb[1] = se->colb[0]; + se->colb[0] = colt; +#ifdef HAVE_GLSL + /* Swap the OpenGL front and back color buffers. */ + if (se->use_shaders) + { + vertex_colort_buffer = se->vertex_colorf_buffer[1]; + se->vertex_colorf_buffer[1] = se->vertex_colorf_buffer[0]; + se->vertex_colorf_buffer[0] = vertex_colort_buffer; + vertex_colort_buffer = se->vertex_colorb_buffer[1]; + se->vertex_colorb_buffer[1] = se->vertex_colorb_buffer[0]; + se->vertex_colorb_buffer[0] = vertex_colort_buffer; + } +#endif /* HAVE_GLSL */ + /* Randomly select new display modes for the main pass. */ + if (se->random_display_mode) + se->display_mode[0] = random() % NUM_DISPLAY_MODES; + if (se->random_appearance) + se->appearance[0] = random() % NUM_APPEARANCES; + if (se->random_colors) + se->colors[0] = random() % NUM_COLORS; + if (se->random_graticule) + se->graticule[0] = random() & 1; + if (se->random_g) + se->g = random() % 4 + 2; + setup_surface_colors(mi,-M_PI_F,M_PI_F,-M_PI_F/2.0f,M_PI_F/2.0f, + NUMPH,NUMTH); + } + } + else /* se->anim_state == ANIM_TURN */ + { + t = (float)se->turn_step/(float)se->num_turn; + /* Apply an easing function to t. */ + t = (3.0f-2.0f*t)*t*t; + quat_slerp(t,se->qs,se->qe,q); + quat_to_angles(q,&se->alpha,&se->beta,&se->delta); + se->turn_step++; + if (se->turn_step > se->num_turn) + { + se->turn_step = 0; + se->anim_state = ANIM_DEFORM; + } + } + + if (se->anim_state == ANIM_DEFORM) + { + se->alpha += speed_x*se->speed_scale; + if (se->alpha >= 360.0f) + se->alpha -= 360.0f; + se->beta += speed_y*se->speed_scale; + if (se->beta >= 360.0f) + se->beta -= 360.0f; + se->delta += speed_z*se->speed_scale; + if (se->delta >= 360.0f) + se->delta -= 360.0f; + } + } + +#ifdef HAVE_GLSL + if (se->use_shaders) + mi->polygon_count = bednorz_sphere_eversion_pf(mi,-M_PI_F,M_PI_F, + -M_PI_F/2.0f,M_PI_F/2.0f, + NUMPH,NUMTH,NUMBDIST, + NUMBDIR,NUMGRID); + else +#endif /* HAVE_GLSL */ + mi->polygon_count = bednorz_sphere_eversion_ff(mi,-M_PI_F,M_PI_F, + -M_PI_F/2.0f,M_PI_F/2.0f, + NUMPH,NUMTH,NUMBDIST, + NUMBDIR,NUMGRID); +} + + +#endif /* USE_GL */ diff --git a/hacks/glx/sphereeversion-corrugations.c b/hacks/glx/sphereeversion-corrugations.c new file mode 100644 index 00000000..1cd5ea78 --- /dev/null +++ b/hacks/glx/sphereeversion-corrugations.c @@ -0,0 +1,2283 @@ +/* sphereeversion-corrugations --- Shows a sphere eversion, i.e., a + smooth deformation (homotopy) that turns a sphere inside out. + During the eversion, the deformed sphere is allowed to intersect + itself transversally. However, no creases or pinch points are + allowed to occur. */ + +/* Copyright (c) 2021-2022 Carsten Steger . */ + +/* + * 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. + * + * This file is provided AS IS with no warranties of any kind. The author + * shall have no liability with respect to the infringement of copyrights, + * trade secrets or any patents by this file or any part thereof. In no + * event will the author be liable for any lost revenue or profits or + * other special, indirect and consequential damages. + * + * REVISION HISTORY: + * C. Steger - 22/02/25: Initial version + */ + +/* + * This program shows a sphere eversion, i.e., a smooth deformation + * (homotopy) that turns a sphere inside out. During the eversion, + * the deformed sphere is allowed to intersect itself transversally. + * However, no creases or pinch points are allowed to occur. + * + * The deformed sphere can be projected to the screen either + * perspectively or orthographically. + * + * There are three display modes for the sphere: solid, transparent, + * or random. If random mode is selected, the mode is changed each + * time an eversion has been completed. + * + * The appearance of the sphere can be as a solid object, as a set of + * see-through bands, or random. The bands can be parallel bands or + * meridian bands, i.e., bands that run along the parallels (lines of + * latitude) or bands that run along the meridians (lines of + * longitude) of the sphere. If random mode is selected, the + * appearance is changed each time an eversion has been completed. + * + * The colors with with the sphere is drawn can be set to two-sided, + * parallel, meridian, earth, or random. In two-sided mode, the + * sphere is drawn with gold on one side and purple on the other side. + * In parallel mode, the sphere is displayed with colors that run from + * blue to white to orange on one side of the surface and from magenta + * to black to green on the other side. The colors are aligned with + * the parallels of the sphere in this mode. In meridian mode, the + * the sphere is displayed with colors that run from blue to white to + * orange to black and back to blue on one side of the surface and + * from magenta to white to green to black and back to magenta on the + * other side. In earth mode, the sphere is drawn with a texture of + * earth by day on one side and with a texture of earth by night on + * the other side. Initially, the earth by day is on the outside and + * the earth by night on the inside. After the first eversion, the + * earth by night will be on the outside. All points of the earth on + * the inside and outside are at the same positions on the sphere. + * Since an eversion transforms the sphere into its inverse, the earth + * by night will appear with all continents mirror reversed. If + * random mode is selected, the color scheme is changed each time an + * eversion has been completed. + * + * By default, the sphere is rotated to a new viewing position each + * time an eversion has been completed. In addition, it is possible + * to rotate the sphere while it is deforming. The rotation speed for + * each of the three coordinate axes around which the sphere rotates + * can be chosen arbitrarily. For best effects, however, it is + * suggested to rotate only around the z axis while the sphere is + * deforming. + * + * This program is inspired inspired by the video "Outside In" by the + * Geometry Center (Bill Thurston, Silvio Levy, Delle Maxwell, Tamara + * Munzner, Nathaniel Thurston, David Ben-Zvi, Matt Headrick, et al.), + * 1994, and the accompanying booklet Silvio Levy: "Making Waves - A + * Guide to the Ideas Behind Outside In", A K Peters, Wellesley, MA, + * 1995. Parts of the code in this program are based on the program + * sphereEversion-0.4-src.zip (https://profs.etsmtl.ca/mmcguffin/eversion/) + * by Michael J. McGuffin, which, in turn, is based on the program + * evert.tar.Z (http://www.geom.uiuc.edu/docs/outreach/oi/software.html) + * developed by Nathaniel Thurston at the Geometry Center. The modified + * code is used with permission. + * + * The sphere eversion method is described in detail in the video and + * booklet mentioned in the previous paragraph. Briefly, the method + * works as follows: Imagine the sphere cut into eight spherical lunes + * (spherical biangles). Now imagine each lune to be a belt. The + * ends of the belt (which correspond to the north and south poles of + * the sphere) are pushed past each other. This creates a loop in the + * belt. If the belt were straightened out, it would contain a 360 + * degree rotation. This rotation can be removed by rotating each end + * of the belt by 180 degrees. Finally, the belt is pushed to the + * opposite side of the sphere, which causes the side of the belt that + * initially was inside the sphere to appear on the outside. + * + * The method described so far only works for a single lune (belt) and + * not for the entire sphere. To make it work for the entire sphere, + * corrugations (i.e., waves) must be added to the sphere. This + * happens in the first phase of the eversion. Then, the method + * described above is applied to the eight lunes. Finally, the + * corrugations are removed to obtain the everted sphere. + * + * To see the eversion for a single lune, the option -lunes-1 can be + * used. Using this option, the eversion, as described above, is + * easier to understand. It is also possible to display two lunes + * using -lunes-2 and four lunes using -lunes-4. Using fewer than + * eight lunes reduces the visual complexity of the eversion and may + * help to understand the method. + * + * Furthermore, it is possible to display only one hemisphere using + * the option -hemispheres-1. This allows to see what is happening in + * the center of the sphere during the eversion. Note that the north + * and south half of the sphere move in a symmetric fashion during the + * eversion. Hence, the eversion is actually composed of 16 + * semi-lunes (spherical triangles from the equator to the poles) that + * all deform in the same manner. By specifying -lunes-1 + * -hemispheres-1, the deformation of one semi-lune can be observed. + * + * Note that the options described above are only intended for + * educational purposes. They are not used if none of them are + * explicitly specified. + */ + + +#ifdef STANDALONE +# include "xlockmore.h" /* from the xscreensaver distribution */ +#else /* !STANDALONE */ +# include "xlock.h" /* from the xlockmore distribution */ +#endif /* !STANDALONE */ + + +#ifdef USE_GL + +#include "sphereeversion.h" + +#include + + +/* Number of subdivisions of the surface */ +#define NUM_STRIPS 8 +#define NUM_U 128 +#define NUM_V 64 + +/* Number of subdivisions per band */ +#define NUMB_PAR (NUM_U/8) +#define NUMB_MER (NUM_V/2) + + +/* Compute a 4x4 rotation matrix from an xscreensaver unit quaternion. Note + that xscreensaver has a different convention for unit quaternions than + the one that is used in this hack. */ +static void quat_to_rotmat(float p[4], float r[16]) +{ + float al, be, de; + float r00, r01, r02, r12, r22; + float m[3][3]; + int i, j; + + r00 = 1.0f-2.0f*(p[1]*p[1]+p[2]*p[2]); + r01 = 2.0f*(p[0]*p[1]+p[2]*p[3]); + r02 = 2.0f*(p[2]*p[0]-p[1]*p[3]); + r12 = 2.0f*(p[1]*p[2]+p[0]*p[3]); + r22 = 1.0f-2.0f*(p[1]*p[1]+p[0]*p[0]); + + al = atan2f(-r12,r22)*180.0f/M_PI_F; + be = atan2f(r02,sqrtf(r00*r00+r01*r01))*180.0f/M_PI_F; + de = atan2f(-r01,r00)*180.0f/M_PI_F; + rotateall(al,be,de,m); + for (i=0; i<3; i++) + { + for (j=0; j<3; j++) + r[j*4+i] = m[i][j]; + r[3*4+i] = 0.0f; + r[i*4+3] = 0.0f; + } + r[3*4+3] = 1.0f; +} + + +/* ------------------------------------------------------------------------- */ + + +typedef struct { + float f; + float fu, fv; +} one_jet; + + +typedef struct { + float f; + float fu, fv; + float fuu, fuv, fvv; +} two_jet; + + +typedef struct { + one_jet x; + one_jet y; + one_jet z; +} one_jet_vec; + + +typedef struct { + two_jet x; + two_jet y; + two_jet z; +} two_jet_vec; + + +typedef void surface_time_function(float u, float v, float t, + int num_strips, one_jet_vec *val); + + +/* ------------------------------------------------------------------------- */ + + +static inline void copy_one_jet(const one_jet *x, one_jet *res) +{ + res->f = x->f; + res->fu = x->fu; + res->fv = x->fv; +} + + +static inline void set_one_jet(float d, float du, float dv, one_jet *res) +{ + res->f = d; + res->fu = du; + res->fv = dv; +} + + +static inline void add_one_jets(const one_jet *x, const one_jet *y, + one_jet *res) +{ + res->f = x->f+y->f; + res->fu = x->fu+y->fu; + res->fv = x->fv+y->fv; +} + + +static inline void sub_one_jets(const one_jet *x, const one_jet *y, + one_jet *res) +{ + res->f = x->f-y->f; + res->fu = x->fu-y->fu; + res->fv = x->fv-y->fv; +} + + +static inline void mult_one_jets(const one_jet *x, const one_jet *y, + one_jet *res) +{ + res->f = x->f*y->f; + res->fu = x->f*y->fu+x->fu*y->f; + res->fv = x->f*y->fv+x->fv*y->f; +} + + +static inline void add_one_jet_float(const one_jet *x, float d, one_jet *res) +{ + res->f = x->f+d; + res->fu = x->fu; + res->fv = x->fv; +} + + +static inline void mult_one_jet_float(const one_jet *x, float d, one_jet *res) +{ + res->f = d*x->f; + res->fu = d*x->fu; + res->fv = d*x->fv; +} + + +static inline void neg_one_jet(const one_jet *x, one_jet *res) +{ + res->f = -x->f; + res->fu = -x->fu; + res->fv = -x->fv; +} + + +static inline void fmod_one_jet(const one_jet *x, float d, one_jet *res) +{ + res->f = fmodf(x->f,d); + if (res->f < 0.0f) + res->f += d; + res->fu = x->fu; + res->fv = x->fv; +} + + +static inline void sin_one_jet(const one_jet *x, one_jet *res) +{ + float s, c; + one_jet t; + + mult_one_jet_float(x,2.0f*M_PI_F,&t); + s = sinf(t.f); + c = cosf(t.f); + res->f = s; + res->fu = c*t.fu; + res->fv = c*t.fv; +} + + +static inline void cos_one_jet(const one_jet *x, one_jet *res) +{ + float s, c; + one_jet t; + + mult_one_jet_float(x,2.0f*M_PI_F,&t); + s = cosf(t.f); + c = -sinf(t.f); + res->f = s; + res->fu = c*t.fu; + res->fv = c*t.fv; +} + + +static inline void pow_one_jet(const one_jet *x, float n, one_jet *res) +{ + float x0, x1; + + x0 = powf(x->f,n); + x1 = (x->f == 0.0f) ? 0.0f : n*x0/x->f; + res->f = x0; + res->fu = x1*x->fu; + res->fv = x1*x->fv; +} + + +static inline void annihilate_one_jet(const one_jet *x, int index, + one_jet *res) +{ + res->f = x->f; + if (index == 0) + { + res->fu = 0.0f; + res->fv = x->fv; + } + else + { + res->fu = x->fu; + res->fv = 0.0f; + } +} + + +static inline void interpolate_one_jets_float(const one_jet *v1, + const one_jet *v2, + const one_jet *weight, + one_jet *res) +{ + one_jet neg_weight, one_minus_weight, v1w, v2w; + + neg_one_jet(weight,&neg_weight); + add_one_jet_float(&neg_weight,1.0f,&one_minus_weight); + mult_one_jets(v1,&one_minus_weight,&v1w); + mult_one_jets(v2,weight,&v2w); + add_one_jets(&v1w,&v2w,res); +} + + +/* ------------------------------------------------------------------------- */ + + +static inline void copy_two_jet(const two_jet *x, two_jet *res) +{ + res->f = x->f; + res->fu = x->fu; + res->fv = x->fv; + res->fuu = x->fuu; + res->fuv = x->fuv; + res->fvv = x->fvv; +} + + +static inline void set_two_jet(float d, float du, float dv, two_jet *res) +{ + res->f = d; + res->fu = du; + res->fv = dv; + res->fuu = 0.0f; + res->fuv = 0.0f; + res->fvv = 0.0f; +} + + +static inline void two_jet_to_one_jet(const two_jet *x, one_jet *res) +{ + res->f = x->f; + res->fu = x->fu; + res->fv = x->fv; +} + + +static inline void add_two_jets(const two_jet *x, const two_jet *y, + two_jet *res) +{ + res->f = x->f+y->f; + res->fu = x->fu+y->fu; + res->fv = x->fv+y->fv; + res->fuu = x->fuu+y->fuu; + res->fuv = x->fuv+y->fuv; + res->fvv = x->fvv+y->fvv; +} + + +static inline void sub_two_jets(const two_jet *x, const two_jet *y, + two_jet *res) +{ + res->f = x->f-y->f; + res->fu = x->fu-y->fu; + res->fv = x->fv-y->fv; + res->fuu = x->fuu-y->fuu; + res->fuv = x->fuv-y->fuv; + res->fvv = x->fvv-y->fvv; +} + + +static inline void mult_two_jets(const two_jet *x, const two_jet *y, + two_jet *res) +{ + res->f = x->f*y->f; + res->fu = x->f*y->fu+x->fu*y->f; + res->fv = x->f*y->fv+x->fv*y->f; + res->fuu = x->f*y->fuu+2.0f*x->fu*y->fu+x->fuu*y->f; + res->fuv = x->f*y->fuv+x->fu*y->fv+x->fv*y->fu+x->fuv*y->f; + res->fvv = x->f*y->fvv+2.0f*x->fv*y->fv+x->fvv*y->f; +} + + +static inline void add_two_jet_float(const two_jet *x, float d, two_jet *res) +{ + res->f = x->f+d; + res->fu = x->fu; + res->fv = x->fv; + res->fuu = x->fuu; + res->fuv = x->fuv; + res->fvv = x->fvv; +} + + +static inline void add_two_jet_float_inplace(float d, two_jet *res) +{ + res->f += d; +} + + +static inline void mult_two_jet_float(const two_jet *x, float d, two_jet *res) +{ + res->f = d*x->f; + res->fu = d*x->fu; + res->fv = d*x->fv; + res->fuu = d*x->fuu; + res->fuv = d*x->fuv; + res->fvv = d*x->fvv; +} + + +static inline void neg_two_jet(const two_jet *x, two_jet *res) +{ + res->f = -x->f; + res->fu = -x->fu; + res->fv = -x->fv; + res->fuu = -x->fuu; + res->fuv = -x->fuv; + res->fvv = -x->fvv; +} + + +static inline void fmod_two_jet(const two_jet *x, float d, two_jet *res) +{ + res->f = fmodf(x->f,d); + if (res->f < 0.0f) + res->f += d; + res->fu = x->fu; + res->fv = x->fv; + res->fuu = x->fuu; + res->fuv = x->fuv; + res->fvv = x->fvv; +} + + +static inline void sin_two_jet(const two_jet *x, two_jet *res) +{ + float s, c; + two_jet t; + + mult_two_jet_float(x,2.0f*M_PI_F,&t); + s = sinf(t.f); + c = cosf(t.f); + res->f = s; + res->fu = c*t.fu; + res->fv = c*t.fv; + res->fuu = c*t.fuu-s*t.fu*t.fu; + res->fuv = c*t.fuv-s*t.fu*t.fv; + res->fvv = c*t.fvv-s*t.fv*t.fv; +} + + +static inline void cos_two_jet(const two_jet *x, two_jet *res) +{ + float s, c; + two_jet t; + + mult_two_jet_float(x,2.0f*M_PI_F,&t); + s = cosf(t.f); + c = -sinf(t.f); + res->f = s; + res->fu = c*t.fu; + res->fv = c*t.fv; + res->fuu = c*t.fuu-s*t.fu*t.fu; + res->fuv = c*t.fuv-s*t.fu*t.fv; + res->fvv = c*t.fvv-s*t.fv*t.fv; +} + + +static inline void pow_two_jet(const two_jet *x, float n, two_jet *res) +{ + float x0, x1, x2; + + x0 = powf(x->f,n); + x1 = x->f == 0.0f ? 0.0f : n*x0/x->f; + x2 = x->f == 0.0f ? 0.0f : (n-1.0f)*x1/x->f; + + res->f = x0; + res->fu = x1*x->fu; + res->fv = x1*x->fv; + res->fuu = x1*x->fuu+x2*x->fu*x->fu; + res->fuv = x1*x->fuv+x2*x->fu*x->fv; + res->fvv = x1*x->fvv+x2*x->fv*x->fv; +} + + +static inline void differentiate_two_jet(const two_jet *x, int index, + one_jet *res) +{ + if (index == 0) + { + res->f = x->fu; + res->fu = x->fuu; + res->fv = x->fuv; + } + else + { + res->f = x->fv; + res->fu = x->fuv; + res->fv = x->fvv; + } +} + + +static inline void annihilate_two_jet(const two_jet *x, int index, + two_jet *res) +{ + res->f = x->f; + if (index == 0) + { + res->fu = 0.0f; + res->fv = x->fv; + res->fuu = 0.0f; + res->fuv = 0.0f; + res->fvv = x->fvv; + } + else + { + res->fu = x->fu; + res->fv = 0.0f; + res->fuu = x->fuu; + res->fuv = 0.0f; + res->fvv = 0.0f; + } +} + + +/* ------------------------------------------------------------------------- */ + + +static inline void add_one_jet_vecs(const one_jet_vec *v, + const one_jet_vec *w, + one_jet_vec *res) +{ + add_one_jets(&v->x,&w->x,&res->x); + add_one_jets(&v->y,&w->y,&res->y); + add_one_jets(&v->z,&w->z,&res->z); +} + + +static inline void mult_one_jet_vec_one_jet(const one_jet_vec *v, + const one_jet *a, + one_jet_vec *res) +{ + mult_one_jets(&v->x,a,&res->x); + mult_one_jets(&v->y,a,&res->y); + mult_one_jets(&v->z,a,&res->z); +} + + +static inline void annihilate_one_jet_vec(const one_jet_vec *v, int index, + one_jet_vec *res) +{ + annihilate_one_jet(&v->x,index,&res->x); + annihilate_one_jet(&v->y,index,&res->y); + annihilate_one_jet(&v->z,index,&res->z); +} + + +static inline void cross_one_jet_vecs(const one_jet_vec *v, + const one_jet_vec *w, + one_jet_vec *res) +{ + one_jet vxwy, vxwz, vywx, vywz, vzwx, vzwy; + + mult_one_jets(&v->y,&w->z,&vywz); + mult_one_jets(&v->z,&w->y,&vzwy); + sub_one_jets(&vywz,&vzwy,&res->x); + mult_one_jets(&v->z,&w->x,&vzwx); + mult_one_jets(&v->x,&w->z,&vxwz); + sub_one_jets(&vzwx,&vxwz,&res->y); + mult_one_jets(&v->x,&w->y,&vxwy); + mult_one_jets(&v->y,&w->x,&vywx); + sub_one_jets(&vxwy,&vywx,&res->z); +} + + +static inline void dot_one_jet_vecs(const one_jet_vec *v, const one_jet_vec *w, + one_jet *res) +{ + one_jet vxwx, vywy, vzwz, vxwxpvywy; + + mult_one_jets(&v->x,&w->x,&vxwx); + mult_one_jets(&v->y,&w->y,&vywy); + mult_one_jets(&v->z,&w->z,&vzwz); + add_one_jets(&vxwx,&vywy,&vxwxpvywy); + add_one_jets(&vxwxpvywy,&vzwz,res); +} + + +static inline void normalize_one_jet_vec(const one_jet_vec *v, + one_jet_vec *res) +{ + one_jet a, sqrt_a; + + dot_one_jet_vecs(v,v,&a); + if (a.f > 0.0f) + pow_one_jet(&a,-0.5f,&sqrt_a); + else + set_one_jet(0.0f,0.0f,0.0f,&sqrt_a); + mult_one_jet_vec_one_jet(v,&sqrt_a,res); +} + + +static inline void rotate_one_jet_vec_z_float(const one_jet_vec *v, + const one_jet *angle, + one_jet_vec *res) +{ + one_jet s, c, vxc, vxs, vyc, vys; + + sin_one_jet(angle,&s); + cos_one_jet(angle,&c); + mult_one_jets(&v->x,&c,&vxc); + mult_one_jets(&v->y,&s,&vys); + add_one_jets(&vxc,&vys,&res->x); + mult_one_jets(&v->x,&s,&vxs); + mult_one_jets(&v->y,&c,&vyc); + sub_one_jets(&vyc,&vxs,&res->y); + copy_one_jet(&v->z,&res->z); +} + + +/* ------------------------------------------------------------------------- */ + + +static inline void two_jet_vec_to_one_jet_vec(const two_jet_vec *v, + one_jet_vec *res) +{ + two_jet_to_one_jet(&v->x,&res->x); + two_jet_to_one_jet(&v->y,&res->y); + two_jet_to_one_jet(&v->z,&res->z); +} + + +static inline void add_two_jet_vecs(const two_jet_vec *v, const two_jet_vec *w, + two_jet_vec *res) +{ + add_two_jets(&v->x,&w->x,&res->x); + add_two_jets(&v->y,&w->y,&res->y); + add_two_jets(&v->z,&w->z,&res->z); +} + + +static inline void mult_two_jet_vec_two_jet(const two_jet_vec *v, + const two_jet *a, + two_jet_vec *res) +{ + mult_two_jets(&v->x,a,&res->x); + mult_two_jets(&v->y,a,&res->y); + mult_two_jets(&v->z,a,&res->z); +} + + +static inline void mult_two_jet_vec_float(const two_jet_vec *v, float a, + two_jet_vec *res) +{ + mult_two_jet_float(&v->x,a,&res->x); + mult_two_jet_float(&v->y,a,&res->y); + mult_two_jet_float(&v->z,a,&res->z); +} + + +static inline void annihilate_two_jet_vec(const two_jet_vec *v, int index, + two_jet_vec *res) +{ + annihilate_two_jet(&v->x,index,&res->x); + annihilate_two_jet(&v->y,index,&res->y); + annihilate_two_jet(&v->z,index,&res->z); +} + + +static inline void differentiate_two_jet_vec(const two_jet_vec *x, int index, + one_jet_vec *res) +{ + differentiate_two_jet(&x->x,index,&res->x); + differentiate_two_jet(&x->y,index,&res->y); + differentiate_two_jet(&x->z,index,&res->z); +} + + +static inline void rotate_two_jet_vec_z_float(const two_jet_vec *v, + float angle, two_jet_vec *res) +{ + float s, c; + two_jet xs, xc, ys, yc; + + s = sinf(angle*2.0f*M_PI_F); + c = cosf(angle*2.0f*M_PI_F); + mult_two_jet_float(&v->x,c,&xc); + mult_two_jet_float(&v->y,s,&ys); + add_two_jets(&xc,&ys,&res->x); + mult_two_jet_float(&v->x,-s,&xs); + mult_two_jet_float(&v->y,c,&yc); + add_two_jets(&xs,&yc,&res->y); + copy_two_jet(&v->z,&res->z); +} + + +static inline void rotate_two_jet_vec_y_float(const two_jet_vec *v, + float angle, two_jet_vec *res) +{ + float s, c; + two_jet xs, xc, zs, zc; + + s = sinf(angle*2.0f*M_PI_F); + c = cosf(angle*2.0f*M_PI_F); + mult_two_jet_float(&v->x,c,&xc); + mult_two_jet_float(&v->z,-s,&zs); + add_two_jets(&xc,&zs,&res->x); + copy_two_jet(&v->y,&res->y); + mult_two_jet_float(&v->x,s,&xs); + mult_two_jet_float(&v->z,c,&zc); + add_two_jets(&xs,&zc,&res->z); +} + + +static inline void interpolate_two_jet_vecs_two_jet(const two_jet_vec *v1, + const two_jet_vec *v2, + const two_jet *weight, + two_jet_vec *res) +{ + two_jet_vec v1w, v2w; + two_jet neg_weight, one_minus_weight; + + neg_two_jet(weight,&neg_weight); + add_two_jet_float(&neg_weight,1.0f,&one_minus_weight); + mult_two_jet_vec_two_jet(v1,&one_minus_weight,&v1w); + mult_two_jet_vec_two_jet(v2,weight,&v2w); + add_two_jet_vecs(&v1w,&v2w,res); +} + + +static inline void interpolate_two_jet_vecs_float(const two_jet_vec *v1, + const two_jet_vec *v2, + float weight, + two_jet_vec *res) +{ + two_jet_vec v1w, v2w; + + mult_two_jet_vec_float(v1,1.0f-weight,&v1w); + mult_two_jet_vec_float(v2,weight,&v2w); + add_two_jet_vecs(&v1w,&v2w,res); +} + + +/* ------------------------------------------------------------------------- */ + + +static void figure_eight(const one_jet_vec *w, const one_jet_vec *h, + const one_jet_vec *bend, const one_jet *form, + const one_jet *v, one_jet_vec *res) +{ + one_jet_vec hh, w_sin_vv2, hh_interp, bend_heights_sqs; + one_jet height, height_neg, heights, heights_sq, heights_sqs; + one_jet vv, vv2, cos_vv, sin_vv2, cos_vv2, cos_vv2_m1; + one_jet cos_vv_m1, cos_vv_m1_xm2, interp; + + fmod_one_jet(v,1.0f,&vv); + cos_one_jet(&vv,&cos_vv); + mult_one_jet_float(&vv,2.0f,&vv2); + sin_one_jet(&vv2,&sin_vv2); + cos_one_jet(&vv2,&cos_vv2); + add_one_jet_float(&cos_vv2,-1.0f,&cos_vv2_m1); + neg_one_jet(&cos_vv2_m1,&height); + if (vv.f > 0.25f && vv.f < 0.75f) + { + neg_one_jet(&height,&height_neg); + add_one_jet_float(&height_neg,4.0f,&height); + } + mult_one_jet_float(&height,0.6f,&heights); + mult_one_jets(&heights,&heights,&heights_sq); + mult_one_jet_float(&heights_sq,1.0f/64.0f,&heights_sqs); + mult_one_jet_vec_one_jet(bend,&heights_sqs,&bend_heights_sqs); + add_one_jet_vecs(h,&bend_heights_sqs,&hh); + add_one_jet_float(&cos_vv,-1.0f,&cos_vv_m1); + mult_one_jet_float(&cos_vv_m1,-2.0f,&cos_vv_m1_xm2); + interpolate_one_jets_float(&cos_vv_m1_xm2,&heights,form,&interp); + mult_one_jet_vec_one_jet(w,&sin_vv2,&w_sin_vv2); + mult_one_jet_vec_one_jet(&hh,&interp,&hh_interp); + add_one_jet_vecs(&w_sin_vv2,&hh_interp,res); +} + + +static void add_figure_eight(two_jet_vec *p, two_jet *u, one_jet *v, + two_jet *form, two_jet *scale, int num_strips, + one_jet_vec *res) +{ + one_jet_vec dp, dpa, du, dv, po, fe, h, w, bend; + one_jet_vec duxdv, duxdvn, hxdu, hxdun, dudsize, popfe; + one_jet fo, dsize, duu, sizeo, sizeos, vs, duuinv; + two_jet_vec pa; + two_jet f, f2, ff, size; + + copy_two_jet(form,&f); + mult_two_jets(&f,scale,&size); + mult_two_jet_float(&f,2.0f,&f2); + mult_two_jets(&f,&f,&ff); + sub_two_jets(&f2,&ff,&f); + two_jet_to_one_jet(&f,&fo); + two_jet_to_one_jet(&size,&sizeo); + differentiate_two_jet_vec(p,1,&dp); + annihilate_one_jet_vec(&dp,1,&dv); + annihilate_two_jet_vec(p,1,&pa); + differentiate_two_jet_vec(&pa,0,&dpa); + normalize_one_jet_vec(&dpa,&du); + cross_one_jet_vecs(&du,&dv,&duxdv); + normalize_one_jet_vec(&duxdv,&duxdvn); + mult_one_jet_vec_one_jet(&duxdvn,&sizeo,&h); + cross_one_jet_vecs(&h,&du,&hxdu); + normalize_one_jet_vec(&hxdu,&hxdun); + mult_one_jet_float(&sizeo,1.1f,&sizeos); + mult_one_jet_vec_one_jet(&hxdun,&sizeos,&w); + differentiate_two_jet(&size,0,&dsize); + differentiate_two_jet(u,0,&duu); + mult_one_jet_vec_one_jet(&du,&dsize,&dudsize); + pow_one_jet(&duu,-1.0f,&duuinv); + mult_one_jet_vec_one_jet(&dudsize,&duuinv,&bend); + figure_eight(&w,&h,&bend,&fo,v,&fe); + two_jet_vec_to_one_jet_vec(&pa,&po); + mult_one_jet_float(v,1.0f/num_strips,&vs); + add_one_jet_vecs(&po,&fe,&popfe); + rotate_one_jet_vec_z_float(&popfe,&vs,res); +} + + +/* ------------------------------------------------------------------------- */ + + +static void arc(const two_jet *u, float xsize, float ysize, float zsize, + two_jet_vec *res) +{ + /* sin(two_jet(0.0f,0.0f,1.0f)): */ + static const two_jet sin_v = { + 0.0f, 0.0f, 2.0f*M_PI_F, 0.0f, 0.0f, 0.0f + }; + /* cos(two_jet(0.0f,0.0f,1.0f)): */ + static const two_jet cos_v = { + 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -4.0f*M_PI_F*M_PI_F + }; + two_jet uq, sin_uq, cos_uq, sin_v_xsize, cos_v_ysize; + + mult_two_jet_float(u,0.25f,&uq); + sin_two_jet(&uq,&sin_uq); + cos_two_jet(&uq,&cos_uq); + mult_two_jet_float(&sin_v,xsize,&sin_v_xsize); + mult_two_jets(&sin_uq,&sin_v_xsize,&res->x); + mult_two_jet_float(&cos_v,ysize,&cos_v_ysize); + mult_two_jets(&sin_uq,&cos_v_ysize,&res->y); + mult_two_jet_float(&cos_uq,zsize,&res->z); +} + + +static inline void param1(two_jet *x, two_jet *p) +{ + float offset; + two_jet xm, xm_sq, xm_sq_neg, xm_2; + two_jet xm_sq_neg_xm_2, xm_sq_xm_2; + + offset = 0.0f; + fmod_two_jet(x,4.0f,&xm); + if (xm.f > 2.0f) + { + add_two_jet_float_inplace(-2.0f,&xm); + offset = 2.0f; + } + pow_two_jet(&xm,2.0f,&xm_sq); + if (xm.f <= 1.0f) + { + neg_two_jet(&xm_sq,&xm_sq_neg); + mult_two_jet_float(&xm,2.0f,&xm_2); + add_two_jets(&xm_sq_neg,&xm_2,&xm_sq_neg_xm_2); + add_two_jet_float(&xm_sq_neg_xm_2,offset,p); + } + else + { + mult_two_jet_float(&xm,-2.0f,&xm_2); + add_two_jets(&xm_sq,&xm_2,&xm_sq_xm_2); + add_two_jet_float(&xm_sq_xm_2,offset+2.0f,p); + } +} + + +static inline void param2(two_jet *x, two_jet *p) +{ + float offset; + two_jet xm, xm_sq, xm_sq_neg, xm_4, xm_sq_neg_xm_4; + + offset = 0.0f; + fmod_two_jet(x,4.0f,&xm); + if (xm.f > 2.0f) + { + add_two_jet_float_inplace(-2.0f,&xm); + offset = 2.0f; + } + pow_two_jet(&xm,2.0f,&xm_sq); + if (xm.f <= 1.0f) + { + add_two_jet_float(&xm_sq,offset,p); + } + else + { + neg_two_jet(&xm_sq,&xm_sq_neg); + mult_two_jet_float(&xm,4.0f,&xm_4); + add_two_jets(&xm_sq_neg,&xm_4,&xm_sq_neg_xm_4); + add_two_jet_float(&xm_sq_neg_xm_4,offset-2.0f,p); + } +} + + +static inline void u_interp(two_jet *x, two_jet *res) +{ + two_jet xm, xm_neg, xm_sq, xm_cu; + two_jet xm_sq_3, xm_cu_m2; + + fmod_two_jet(x,2.0f,&xm); + if (xm.f > 1.0f) + { + neg_two_jet(&xm,&xm_neg); + add_two_jet_float(&xm_neg,2.0f,&xm); + } + pow_two_jet(&xm,2.0f,&xm_sq); + pow_two_jet(&xm,3.0f,&xm_cu); + mult_two_jet_float(&xm_sq,3.0f,&xm_sq_3); + mult_two_jet_float(&xm_cu,-2.0f,&xm_cu_m2); + add_two_jets(&xm_sq_3,&xm_cu_m2,res); +} + + +static inline void ff_interp(two_jet *x, two_jet *res) +{ + static const float ffpow = 3.0f; + two_jet xm, xm_neg, xms, xm_ffm1, xm_ff; + two_jet xm_ffm1_ff, xm_ff_1mff; + + fmod_two_jet(x,2.0f,&xm); + if (xm.f > 1.0f) + { + neg_two_jet(&xm,&xm_neg); + add_two_jet_float(&xm_neg,2.0f,&xm); + } + mult_two_jet_float(&xm,1.06f,&xms); + add_two_jet_float(&xms,-0.05f,&xm); + if (xm.f < 0.0f) + { + set_two_jet(0.0f,0.0f,0.0f,res); + } + else if (xm.f > 1.0f) + { + set_two_jet(1.0f,0.0f,0.0f,res); + } + else + { + pow_two_jet(&xm,ffpow-1.0f,&xm_ffm1); + pow_two_jet(&xm,ffpow,&xm_ff); + mult_two_jet_float(&xm_ffm1,ffpow,&xm_ffm1_ff); + mult_two_jet_float(&xm_ff,1.0f-ffpow,&xm_ff_1mff); + add_two_jets(&xm_ffm1_ff,&xm_ff_1mff,res); + } +} + + +static inline void fs_interp(two_jet *x, two_jet *res) +{ + static const float fspow = 3.0f; + two_jet xm, xm_neg, xm_fsm1, xm_fs; + two_jet xm_fsm1_fs, xm_fs_1mfs; + two_jet xm_fsm1_fs_xm_fs_1mfs; + + fmod_two_jet(x,2.0f,&xm); + if (xm.f > 1.0f) + { + neg_two_jet(&xm,&xm_neg); + add_two_jet_float(&xm_neg,2.0f,&xm); + } + pow_two_jet(&xm,fspow-1.0f,&xm_fsm1); + pow_two_jet(&xm,fspow,&xm_fs); + mult_two_jet_float(&xm_fsm1,fspow,&xm_fsm1_fs); + mult_two_jet_float(&xm_fs,1.0f-fspow,&xm_fs_1mfs); + add_two_jets(&xm_fsm1_fs,&xm_fs_1mfs,&xm_fsm1_fs_xm_fs_1mfs); + mult_two_jet_float(&xm_fsm1_fs_xm_fs_1mfs,-0.2f,res); +} + + +/* ------------------------------------------------------------------------- */ + + +static inline void stage1(two_jet *u, two_jet_vec *s1) +{ + arc(u,1.0f,1.0f,1.0f,s1); +} + + +static inline void stage2(two_jet *u, two_jet_vec *s2) +{ + two_jet p1u, p2u, ui; + two_jet_vec a1, a2; + + param1(u,&p1u); + param2(u,&p2u); + arc(&p1u,0.9f,0.9f,-1.0f,&a1); + arc(&p2u,1.0f,1.0f,0.5f,&a2); + u_interp(u,&ui); + interpolate_two_jet_vecs_two_jet(&a1,&a2,&ui,s2); +} + + +static inline void stage3(two_jet *u, two_jet_vec *s3) +{ + two_jet p1u, p2u, ui; + two_jet_vec a1, a2; + + param1(u,&p1u); + param2(u,&p2u); + arc(&p1u,-0.9f,-0.9f,-1.0f,&a1); + arc(&p2u,-1.0f,1.0f,-0.5f,&a2); + u_interp(u,&ui); + interpolate_two_jet_vecs_two_jet(&a1,&a2,&ui,s3); +} + + +static inline void stage4(two_jet *u, two_jet_vec *s4) +{ + arc(u,-1.0f,-1.0f,-1.0f,s4); +} + + +static inline void scene12(two_jet *u, float t, two_jet_vec *s12) +{ + two_jet_vec s1, s2; + + stage1(u,&s1); + stage2(u,&s2); + interpolate_two_jet_vecs_float(&s1,&s2,t,s12); +} + + +static inline void scene23(two_jet *u, float t, two_jet_vec *s23) +{ + two_jet p1u, p2u, ui; + two_jet_vec a1, a2, a1r, a2r; + float tt; + + t *= 0.5f; + tt = (u->f <= 1.0f) ? t : -t; + param1(u,&p1u); + param2(u,&p2u); + arc(&p1u,0.9f,0.9f,-1.0f,&a1); + arc(&p2u,1.0f,1.0f,0.5f,&a2); + rotate_two_jet_vec_z_float(&a1,tt,&a1r); + rotate_two_jet_vec_y_float(&a2,t,&a2r); + u_interp(u,&ui); + interpolate_two_jet_vecs_two_jet(&a1r,&a2r,&ui,s23); +} + + +static inline void scene34(two_jet *u, float t, two_jet_vec *s34) +{ + two_jet_vec s3, s4; + + stage3(u,&s3); + stage4(u,&s4); + interpolate_two_jet_vecs_float(&s3,&s4,t,s34); +} + + +static inline void corrugate(float u, float v, float t, int num_strips, + one_jet_vec *val) +{ + two_jet_vec s1; + two_jet uj, form, scale, ui; + one_jet vj; + + set_two_jet(u,1.0f,0.0f,&uj); + set_one_jet(v,0.0f,1.0f,&vj); + stage1(&uj,&s1); + ff_interp(&uj,&ui); + mult_two_jet_float(&ui,t,&form); + fs_interp(&uj,&scale); + add_figure_eight(&s1,&uj,&vj,&form,&scale,num_strips,val); +} + + +static inline void push_through(float u, float v, float t, int num_strips, + one_jet_vec *val) +{ + two_jet_vec s12; + two_jet uj, form, scale; + one_jet vj; + + set_two_jet(u,1.0f,0.0f,&uj); + set_one_jet(v,0.0f,1.0f,&vj); + scene12(&uj,t,&s12); + ff_interp(&uj,&form); + fs_interp(&uj,&scale); + add_figure_eight(&s12,&uj,&vj,&form,&scale,num_strips,val); +} + + +static inline void twist(float u, float v, float t, int num_strips, + one_jet_vec *val) +{ + two_jet_vec s23; + two_jet uj, form, scale; + one_jet vj; + + set_two_jet(u,1.0f,0.0f,&uj); + set_one_jet(v,0.0f,1.0f,&vj); + scene23(&uj,t,&s23); + ff_interp(&uj,&form); + fs_interp(&uj,&scale); + add_figure_eight(&s23,&uj,&vj,&form,&scale,num_strips,val); +} + + +static inline void un_push(float u, float v, float t, int num_strips, + one_jet_vec *val) +{ + two_jet_vec s34; + two_jet uj, form, scale; + one_jet vj; + + set_two_jet(u,1.0f,0.0f,&uj); + set_one_jet(v,0.0f,1.0f,&vj); + scene34(&uj,t,&s34); + ff_interp(&uj,&form); + fs_interp(&uj,&scale); + add_figure_eight(&s34,&uj,&vj,&form,&scale,num_strips,val); +} + + +static inline void un_corrugate(float u, float v, float t, int num_strips, + one_jet_vec *val) +{ + two_jet_vec s4; + two_jet uj, form, scale, ui; + one_jet vj; + + set_two_jet(u,1.0f,0.0f,&uj); + set_one_jet(v,0.0f,1.0f,&vj); + stage4(&uj,&s4); + ff_interp(&uj,&ui); + mult_two_jet_float(&ui,1.0f-t,&form); + fs_interp(&uj,&scale); + add_figure_eight(&s4,&uj,&vj,&form,&scale,num_strips,val); +} + + +/* ------------------------------------------------------------------------- */ + + +static inline void gen_point_and_normal(one_jet_vec *p, float *point, + float *normal) +{ + float x, y, z, nx, ny, nz, s; + + x = p->x.f; + y = p->y.f; + z = p->z.f; + nx = p->y.fu*p->z.fv-p->z.fu*p->y.fv; + ny = p->z.fu*p->x.fv-p->x.fu*p->z.fv; + nz = p->x.fu*p->y.fv-p->y.fu*p->x.fv; + s = nx*nx+ny*ny+nz*nz; + if (s > 0.0f) + s = sqrtf(1.0f/s); + else + s = 0.0f; + + point[0] = x; + point[1] = y; + point[2] = z; + normal[0] = -nx*s; + normal[1] = -ny*s; + normal[2] = -nz*s; +} + + +static inline void gen_surface(surface_time_function *func, float umin, + float umax, int ucount, float vmin, + float vmax, int vcount, float t, + float *points, float *normals, int num_strips) +{ + one_jet_vec val; + int j, k, l; + float u, v, delta_u, delta_v; + float speedv; + + if (ucount <= 0 || vcount <= 0) + return; + + delta_u = (umax-umin)/ucount; + delta_v = (vmax-vmin)/vcount; + + for (j=0; j<=ucount; j++) + { + u = umin+j*delta_u; + (*func)(u,0.0f,t,num_strips,&val); + speedv = sqrtf(val.x.fv*val.x.fv+val.y.fv*val.y.fv+val.z.fv*val.z.fv); + if (speedv == 0.0f) + { + /* Perturb a bit, hoping to avoid degeneracy */ + u += u < 1.0f ? FLT_EPSILON : -FLT_EPSILON; + } + for (k=0; k<=vcount; k++) + { + l = 3*(j*(vcount+1)+k); + v = vmin+k*delta_v; + (*func)(u,v,t,num_strips,&val); + gen_point_and_normal(&val,&points[l],&normals[l]); + } + } +} + + +static void generate_geometry(float *points, float *normals, float time, + int num_strips, float u_min, int u_count, + float u_max, float v_min, int v_count, + float v_max) +{ + /* Start of corrugation */ + static const float corr_start = 0.00f; + /* Start of push (poles are pushed through each other) */ + static const float push_start = 0.10f; + /* Start of twist (poles rotate in opposite directions) */ + static const float twist_start = 0.23f; + /* Start of unpush (poles held fixed while corrugations pushed through + center) */ + static const float unpush_start = 0.60f; + /* Start of uncorrugation */ + static const float uncorr_start = 0.93f; + + if (time >= uncorr_start) + gen_surface(un_corrugate,u_min,u_max,u_count,v_min,v_max,v_count, + (time-uncorr_start)/(1.0f-uncorr_start), + points,normals,num_strips); + else if (time >= unpush_start) + gen_surface(un_push,u_min,u_max,u_count,v_min,v_max,v_count, + (time-unpush_start)/(uncorr_start-unpush_start), + points,normals,num_strips); + else if (time >= twist_start) + gen_surface(twist,u_min,u_max,u_count,v_min,v_max,v_count, + (time-twist_start)/(unpush_start-twist_start), + points,normals,num_strips); + else if (time >= push_start) + gen_surface(push_through,u_min,u_max,u_count,v_min,v_max,v_count, + (time-push_start)/(twist_start-push_start), + points,normals,num_strips); + else if (time >= corr_start) + gen_surface(corrugate,u_min,u_max,u_count,v_min,v_max,v_count, + (time-corr_start)/(push_start-corr_start), + points,normals,num_strips); +} + + +/* ------------------------------------------------------------------------- */ + + +/* Set up the surface colors for the main pass (i.e., index 0). */ +static void setup_surface_colors(ModeInfo *mi) +{ + int hemisphere, strip, j, k, l; + float phi, theta, angle_strip; + sphereeversionstruct *se = &sphereeversion[MI_SCREEN(mi)]; + static const float matc[3][3] = { + { 0.577350269f, -0.577350269f, 0.577350269f }, + { 0.211324865f, 0.788675135f, 0.577350269f }, + { -0.788675135f, -0.211324865f, 0.577350269f } + }; + + angle_strip = 2.0f*M_PI_F/NUM_STRIPS; + + if (se->colors[0] != COLORS_TWOSIDED) + { + for (hemisphere=0; hemisphere<2; hemisphere++) + { + for (strip=0; stripcolors[0] == COLORS_PARALLEL) + color(se,(2.0f*theta+3.0f*M_PI_F/4.0f)*(2.0f/3.0f),matc, + &se->colf[0][4*l],&se->colb[0][4*l]); + else + color(se,phi,matc,&se->colf[0][4*l],&se->colb[0][4*l]); + } + } + } + } + } +#ifdef VERTEXATTRIBARRAY_WORKAROUND + else /* se->colors[0] == COLORS_TWOSIDED */ + { + /* For some strange reason, the color buffer must be initialized + and used on macOS. Otherwise two-sided lighting will not + work. */ + int m; + for (hemisphere=0; hemisphere<2; hemisphere++) + { + for (strip=0; stripcolf[0][4*l+m] = 1.0f; + se->colb[0][4*l+m] = 1.0f; + } + } + } + } + } + } +#endif /* VERTEXATTRIBARRAY_WORKAROUND */ + +#ifdef HAVE_GLSL + if (se->use_shaders) + { + glBindBuffer(GL_ARRAY_BUFFER,se->vertex_colorf_buffer[0]); + glBufferData(GL_ARRAY_BUFFER, + 4*2*NUM_STRIPS*(NUM_U+1)*(NUM_V+1)*sizeof(GLfloat), + se->colf[0],GL_STATIC_DRAW); + glBindBuffer(GL_ARRAY_BUFFER,0); + + glBindBuffer(GL_ARRAY_BUFFER,se->vertex_colorb_buffer[0]); + glBufferData(GL_ARRAY_BUFFER, + 4*2*NUM_STRIPS*(NUM_U+1)*(NUM_V+1)*sizeof(GLfloat), + se->colb[0],GL_STATIC_DRAW); + glBindBuffer(GL_ARRAY_BUFFER,0); + } +#endif /* HAVE_GLSL */ +} + + +#ifdef HAVE_GLSL + +/* Set up the texture coordinates. */ +static void setup_tex_coords(ModeInfo *mi) +{ + int hemisphere, strip, j, k, l; + float phi, theta, phi_scale, theta_scale, angle_strip; + sphereeversionstruct *se = &sphereeversion[MI_SCREEN(mi)]; + + angle_strip = 2.0f*M_PI_F/NUM_STRIPS; + phi_scale = 0.5f/M_PI_F; + theta_scale = 1.0f/M_PI_F; + + for (hemisphere=0; hemisphere<2; hemisphere++) + { + for (strip=0; striptex[2*l+0] = 1.0f-(phi_scale*phi+0.5f); + se->tex[2*l+1] = theta_scale*theta+0.5f; + } + } + } + } + + if (se->use_shaders) + { + glBindBuffer(GL_ARRAY_BUFFER,se->vertex_tex_coord_buffer); + glBufferData(GL_ARRAY_BUFFER, + 4*2*NUM_STRIPS*(NUM_U+1)*(NUM_V+1)*sizeof(GLfloat), + se->tex,GL_STATIC_DRAW); + glBindBuffer(GL_ARRAY_BUFFER,0); + } +} + +#endif /* HAVE_GLSL */ + + +/* Draw the sphere eversion using OpenGL's fixed functionality. */ +static int outside_in_ff(ModeInfo *mi) +{ + static const GLfloat light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f }; + static const GLfloat light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f }; + static const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; + static const GLfloat light_position[] = { 1.0f, 1.0f, 1.0f, 0.0f }; + static const GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; + static const GLfloat mat_diff_gold[] = { 1.0f, 0.843f, 0.0f, 1.0f }; + static const GLfloat mat_diff_purple[] = { 0.5f, 0.0f, 0.5f, 1.0f }; + static const GLfloat mat_diff_gold_trans[] = { 1.0f, 0.843f, 0.0f, 0.7f }; + static const GLfloat mat_diff_purple_trans[] = { 0.5f, 0.0f, 0.5f, 0.7f }; + static const GLfloat mat_diff_front[] = { 1.0f, 1.0f, 1.0f, 1.0f }; + sphereeversionstruct *se = &sphereeversion[MI_SCREEN(mi)]; + int i, j, k, l, m, hemisphere, strip; + float angle; + float *cf, *cb; + float qu[4], qr[16]; + int polys = 0; + + generate_geometry(se->sp,se->sn,se->time,NUM_STRIPS,0.0f,NUM_U,1.0f, + 0.0f,NUM_V,1.0f); + + glClearColor(0.0f,0.0f,0.0f,0.0f); + glClearDepth(1.0f); + glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + if (se->projection == DISP_PERSPECTIVE) + { + gluPerspective(60.0f,se->aspect,-se->offset3d[2]-2.0f, + -se->offset3d[2]+2.0f); + } + else + { + if (se->aspect >= 1.0f) + glOrtho(-1.8f*se->aspect,1.8f*se->aspect,-1.8f,1.8f, + -se->offset3d[2]-2.0f,-se->offset3d[2]+2.0f); + else + glOrtho(-1.8f,1.8f,-1.8f/se->aspect,1.8f/se->aspect, + -se->offset3d[2]-2.0f,-se->offset3d[2]+2.0f); + } + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + glShadeModel(GL_SMOOTH); + glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); + glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_TRUE); + glEnable(GL_LIGHTING); + glEnable(GL_LIGHT0); + glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient); + glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse); + glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular); + glLightfv(GL_LIGHT0,GL_POSITION,light_position); + glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,mat_specular); + glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,50.0); + if (se->display_mode[0] == DISP_SURFACE) + { + glEnable(GL_DEPTH_TEST); + glDepthFunc(GL_LESS); + glDepthMask(GL_TRUE); + glDisable(GL_BLEND); + } + else + { + glDisable(GL_DEPTH_TEST); + glDepthMask(GL_FALSE); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA,GL_ONE); + } + + if (se->colors[0] == COLORS_TWOSIDED || se->colors[0] == COLORS_EARTH) + { + glColor3fv(mat_diff_front); + if (se->display_mode[0] == DISP_SURFACE) + { + glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,mat_diff_gold); + glMaterialfv(GL_BACK,GL_AMBIENT_AND_DIFFUSE,mat_diff_purple); + } + else + { + glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,mat_diff_gold_trans); + glMaterialfv(GL_BACK,GL_AMBIENT_AND_DIFFUSE,mat_diff_purple_trans); + } + } + + gltrackball_get_quaternion(se->trackball,qu); + quat_to_rotmat(qu,qr); + glTranslatef(0.0f,0.0f,-3.2f); + glMultMatrixf(qr); + glRotatef(se->alpha,1.0f,0.0f,0.0f); + glRotatef(se->beta,0.0f,1.0f,0.0f); + glRotatef(se->delta,0.0f,0.0f,1.0f); + + for (hemisphere=0; hemispherenum_hemispheres; hemisphere++) + { + glPushMatrix(); + glRotatef(hemisphere*180.0f,0.0f,1.0f,0.0f); + for (strip=0; stripstrip_step) + { + angle = (hemisphere == 0 ? -strip : strip+1)*360.0f/NUM_STRIPS; + glPushMatrix(); + glRotatef(angle,0.0f,0.0f,1.0f); + + if (se->appearance[0] == APPEARANCE_SOLID) + { + for (k=0; kcolors[0] != COLORS_TWOSIDED && + se->colors[0] != COLORS_EARTH) + { + m = (hemisphere*NUM_STRIPS+strip)*(NUM_U+1)*(NUM_V+1)+l; + cf = &se->colf[0][4*m]; + cb = &se->colb[0][4*m]; + glColor3fv(cf); + glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,cf); + glMaterialfv(GL_BACK,GL_AMBIENT_AND_DIFFUSE,cb); + } + glNormal3fv(&se->sn[3*l]); + glVertex3fv(&se->sp[3*l]); + } + } + glEnd(); + } + } + else if (se->appearance[0] == APPEARANCE_MERIDIAN_BANDS) + { + for (k=0; kappearance[0] == APPEARANCE_MERIDIAN_BANDS && + ((k & (NUMB_MER-1)) >= NUMB_MER/4) && + ((k & (NUMB_MER-1)) < 3*NUMB_MER/4)) + continue; + glBegin(GL_TRIANGLE_STRIP); + for (j=0; j<=NUM_U; j++) + { + for (i=0; i<=1; i++) + { + l = j*(NUM_V+1)+k+i; + if (se->colors[0] != COLORS_TWOSIDED && + se->colors[0] != COLORS_EARTH) + { + m = (hemisphere*NUM_STRIPS+strip)*(NUM_U+1)*(NUM_V+1)+l; + cf = &se->colf[0][4*m]; + cb = &se->colb[0][4*m]; + glColor3fv(cf); + glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,cf); + glMaterialfv(GL_BACK,GL_AMBIENT_AND_DIFFUSE,cb); + } + glNormal3fv(&se->sn[3*l]); + glVertex3fv(&se->sp[3*l]); + } + } + glEnd(); + } + } + else if (se->appearance[0] == APPEARANCE_PARALLEL_BANDS) + { + for (j=0; j= NUMB_PAR/4) && + ((j & (NUMB_PAR-1)) < 3*NUMB_PAR/4)) + continue; + glBegin(GL_TRIANGLE_STRIP); + for (k=NUM_V; k>=0; k--) + { + for (i=0; i<=1; i++) + { + l = (j+i)*(NUM_V+1)+k; + if (se->colors[0] != COLORS_TWOSIDED && + se->colors[0] != COLORS_EARTH) + { + m = (hemisphere*NUM_STRIPS+strip)*(NUM_U+1)*(NUM_V+1)+l; + cf = &se->colf[0][4*m]; + cb = &se->colb[0][4*m]; + glColor3fv(cf); + glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,cf); + glMaterialfv(GL_BACK,GL_AMBIENT_AND_DIFFUSE,cb); + } + glNormal3fv(&se->sn[3*l]); + glVertex3fv(&se->sp[3*l]); + } + } + glEnd(); + } + } + glPopMatrix(); + } + glPopMatrix(); + } + + if (se->appearance[0] == APPEARANCE_SOLID) + polys = 2*se->num_hemispheres*8/se->strip_step*(NUM_U+1)*NUM_V; + else if (se->appearance[0] == APPEARANCE_MERIDIAN_BANDS) + polys = se->num_hemispheres*8/se->strip_step*(NUM_U+1)*NUM_V; + else if (se->appearance[0] == APPEARANCE_PARALLEL_BANDS) + polys = se->num_hemispheres*8/se->strip_step*NUM_U*(NUM_V+1); + + return polys; +} + + +#ifdef HAVE_GLSL + +/* Draw the sphere eversion using OpenGL's programmable functionality. */ +static int outside_in_pf(ModeInfo *mi) +{ + static const GLfloat light_model_ambient[] = { 0.2f, 0.2f, 0.2f, 1.0f }; + static const GLfloat light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f }; + static const GLfloat light_ambient_earth[] = { 0.3f, 0.3f, 0.3f, 1.0f }; + static const GLfloat light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f }; + static const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; + static const GLfloat light_position[] = { 1.0f, 1.0f, 1.0f, 0.0f }; + static const GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f }; + static const GLfloat mat_diff_gold[] = { 1.0f, 0.843f, 0.0f, 1.0f }; + static const GLfloat mat_diff_purple[] = { 0.5f, 0.0f, 0.5f, 1.0f }; + static const GLfloat mat_diff_gold_trans[] = { 1.0f, 0.843f, 0.0f, 0.7f }; + static const GLfloat mat_diff_purple_trans[] = { 0.5f, 0.0f, 0.5f, 0.7f }; + static const GLfloat mat_diff_white[] = { 1.0f, 1.0f, 1.0f, 1.0f }; + static const GLfloat mat_diff_white_trans[] = { 1.0f, 1.0f, 1.0f, 0.7f }; + static const GLuint blend_indices[6] = { 0, 1, 2, 2, 3, 0 }; + static const GLfloat blend_p[4][2] = + { { -1.0, -1.0 }, { 1.0, -1.0 }, { 1.0, 1.0 }, { -1.0, 1.0 } }; + static const GLfloat blend_t[4][2] = + { { 0.0, 0.0 }, { 1.0, 0.0 }, { 1.0, 1.0 }, { 0.0, 1.0 } }; + sphereeversionstruct *se = &sphereeversion[MI_SCREEN(mi)]; + int i, j, k, l, hemisphere, strip, pass, num_passes, ni; + float angle, t; + float qu[4], qr[16]; + GLfloat light_direction[3], half_vector[3], len; + GLfloat p_mat[16], mv_mat[16], mv_mat1[16], mv_mat2[16]; + GLint draw_buf, read_buf; + GLsizeiptr index_offset; + int polys = 0; + + if (!se->use_shaders) + return 0; + + if (!se->buffers_initialized) + { + /* The indices only need to be computed once. */ + /* Compute the solid indices. */ + ni = 0; + se->num_solid_strips = 0; + se->num_solid_triangles = 0; + for (j=0; j=0; k--) + { + for (i=0; i<=1; i++) + { + l = (j+i)*(NUM_V+1)+k; + se->solid_indices[ni++] = l; + } + } + se->num_solid_strips++; + } + se->num_solid_triangles = 2*(NUM_V+1); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,se->solid_indices_buffer); + glBufferData(GL_ELEMENT_ARRAY_BUFFER,ni*sizeof(GLuint), + se->solid_indices,GL_STATIC_DRAW); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0); + + /* Compute the parallel indices. */ + ni = 0; + se->num_parallel_strips = 0; + se->num_parallel_triangles = 0; + for (j=0; j= NUMB_PAR/4) && + ((j & (NUMB_PAR-1)) < 3*NUMB_PAR/4)) + continue; + for (k=NUM_V; k>=0; k--) + { + for (i=0; i<=1; i++) + { + l = (j+i)*(NUM_V+1)+k; + se->parallel_indices[ni++] = l; + } + } + se->num_parallel_strips++; + } + se->num_parallel_triangles = 2*(NUM_V+1); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,se->parallel_indices_buffer); + glBufferData(GL_ELEMENT_ARRAY_BUFFER,ni*sizeof(GLuint), + se->parallel_indices,GL_STATIC_DRAW); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0); + + /* Compute the meridian indices. */ + ni = 0; + se->num_meridian_strips = 0; + se->num_meridian_triangles = 0; + for (k=0; k= NUMB_MER/4) && + ((k & (NUMB_MER-1)) < 3*NUMB_MER/4)) + continue; + for (j=0; j<=NUM_U; j++) + { + for (i=0; i<=1; i++) + { + l = j*(NUM_V+1)+k+i; + se->meridian_indices[ni++] = l; + } + } + se->num_meridian_strips++; + } + se->num_meridian_triangles = 2*(NUM_U+1); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,se->meridian_indices_buffer); + glBufferData(GL_ELEMENT_ARRAY_BUFFER,ni*sizeof(GLuint), + se->meridian_indices,GL_STATIC_DRAW); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0); + + se->buffers_initialized = GL_TRUE; + } + + generate_geometry(se->sp,se->sn,se->time,NUM_STRIPS,0.0f,NUM_U,1.0f, + 0.0f,NUM_V,1.0f); + + glBindBuffer(GL_ARRAY_BUFFER,se->vertex_pos_buffer); + glBufferData(GL_ARRAY_BUFFER,3*(NUM_U+1)*(NUM_V+1)*sizeof(GLfloat), + se->sp,GL_STREAM_DRAW); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0); + + glBindBuffer(GL_ARRAY_BUFFER,se->vertex_normal_buffer); + glBufferData(GL_ARRAY_BUFFER,3*(NUM_U+1)*(NUM_V+1)*sizeof(GLfloat), + se->sn,GL_STREAM_DRAW); + glBindBuffer(GL_ARRAY_BUFFER,0); + + glsl_Identity(p_mat); + if (se->projection == DISP_PERSPECTIVE) + { + glsl_Perspective(p_mat,60.0f,se->aspect,-se->offset3d[2]-2.0f, + -se->offset3d[2]+2.0f); + } + else + { + if (se->aspect >= 1.0f) + glsl_Orthographic(p_mat,-1.8f*se->aspect,1.8f*se->aspect,-1.8f,1.8f, + -se->offset3d[2]-2.0f,-se->offset3d[2]+2.0f); + else + glsl_Orthographic(p_mat,-1.8f,1.8f,-1.8f/se->aspect,1.8f/se->aspect, + -se->offset3d[2]-2.0f,-se->offset3d[2]+2.0f); + } + + gltrackball_get_quaternion(se->trackball,qu); + quat_to_rotmat(qu,qr); + glsl_Identity(mv_mat); + glsl_Translate(mv_mat,0.0f,0.0f,-3.2f); + glsl_MultMatrix(mv_mat,qr); + glsl_Rotate(mv_mat,se->alpha,1.0f,0.0f,0.0f); + glsl_Rotate(mv_mat,se->beta,0.0f,1.0f,0.0f); + glsl_Rotate(mv_mat,se->delta,0.0f,0.0f,1.0f); + + len = sqrtf(light_position[0]*light_position[0]+ + light_position[1]*light_position[1]+ + light_position[2]*light_position[2]); + light_direction[0] = light_position[0]/len; + light_direction[1] = light_position[1]/len; + light_direction[2] = light_position[2]/len; + half_vector[0] = light_direction[0]; + half_vector[1] = light_direction[1]; + half_vector[2] = light_direction[2]+1.0f; + len = sqrtf(half_vector[0]*half_vector[0]+ + half_vector[1]*half_vector[1]+ + half_vector[2]*half_vector[2]); + half_vector[0] /= len; + half_vector[1] /= len; + half_vector[2] /= len; + + num_passes = se->anim_state == ANIM_TURN ? 2 : 1; + + for (pass=0; passpoly_shader_program); + + glClearColor(0.0f,0.0f,0.0f,0.0f); + glClearDepth(1.0f); + glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); + + glUniformMatrix4fv(se->poly_proj_index,1,GL_FALSE,p_mat); + + glUniform4fv(se->poly_front_ambient_index,1,mat_diff_white); + glUniform4fv(se->poly_front_diffuse_index,1,mat_diff_white); + glUniform4fv(se->poly_back_ambient_index,1,mat_diff_white); + glUniform4fv(se->poly_back_diffuse_index,1,mat_diff_white); + glVertexAttrib4f(se->poly_colorf_index,1.0f,1.0f,1.0f,1.0f); + glVertexAttrib4f(se->poly_colorb_index,1.0f,1.0f,1.0f,1.0f); + + glUniform4fv(se->poly_front_ambient_index,1,mat_diff_white); + glUniform4fv(se->poly_front_diffuse_index,1,mat_diff_white); + glUniform4fv(se->poly_back_ambient_index,1,mat_diff_white); + glUniform4fv(se->poly_back_diffuse_index,1,mat_diff_white); + glVertexAttrib4f(se->poly_colorf_index,1.0f,1.0f,1.0f,1.0f); + glVertexAttrib4f(se->poly_colorb_index,1.0f,1.0f,1.0f,1.0f); + + glUniform4fv(se->poly_glbl_ambient_index,1,light_model_ambient); + if (se->colors[pass] != COLORS_EARTH) + glUniform4fv(se->poly_lt_ambient_index,1,light_ambient); + else + glUniform4fv(se->poly_lt_ambient_index,1,light_ambient_earth); + glUniform4fv(se->poly_lt_diffuse_index,1,light_diffuse); + glUniform4fv(se->poly_lt_specular_index,1,light_specular); + glUniform3fv(se->poly_lt_direction_index,1,light_direction); + glUniform3fv(se->poly_lt_halfvect_index,1,half_vector); + glUniform4fv(se->poly_specular_index,1,mat_specular); + glUniform1f(se->poly_shininess_index,50.0f); + + if (se->display_mode[pass] == DISP_SURFACE) + { + glDisable(GL_CULL_FACE); + glEnable(GL_DEPTH_TEST); + glDepthFunc(GL_LESS); + glDepthMask(GL_TRUE); + glDisable(GL_BLEND); + } + else + { + glDisable(GL_CULL_FACE); + glDisable(GL_DEPTH_TEST); + glDepthMask(GL_FALSE); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA,GL_ONE); + } + + if (se->colors[pass] == COLORS_TWOSIDED) + { + if (se->display_mode[pass] == DISP_SURFACE) + { + glUniform4fv(se->poly_front_ambient_index,1,mat_diff_gold); + glUniform4fv(se->poly_front_diffuse_index,1,mat_diff_gold); + glUniform4fv(se->poly_back_ambient_index,1,mat_diff_purple); + glUniform4fv(se->poly_back_diffuse_index,1,mat_diff_purple); + } + else + { + glUniform4fv(se->poly_front_ambient_index,1,mat_diff_gold_trans); + glUniform4fv(se->poly_front_diffuse_index,1,mat_diff_gold_trans); + glUniform4fv(se->poly_back_ambient_index,1,mat_diff_purple_trans); + glUniform4fv(se->poly_back_diffuse_index,1,mat_diff_purple_trans); + } + } + else if (se->colors[pass] == COLORS_EARTH) + { + if (se->display_mode[pass] == DISP_TRANSPARENT) + { + glUniform4fv(se->poly_front_ambient_index,1,mat_diff_white_trans); + glUniform4fv(se->poly_front_diffuse_index,1,mat_diff_white_trans); + glUniform4fv(se->poly_back_ambient_index,1,mat_diff_white_trans); + glUniform4fv(se->poly_back_diffuse_index,1,mat_diff_white_trans); + } + else + { + glUniform4fv(se->poly_front_ambient_index,1,mat_diff_white); + glUniform4fv(se->poly_front_diffuse_index,1,mat_diff_white); + glUniform4fv(se->poly_back_ambient_index,1,mat_diff_white); + glUniform4fv(se->poly_back_diffuse_index,1,mat_diff_white); + } + } + + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D,se->tex_names[0]); + glUniform1i(se->poly_tex_samp_f_index,0); + glActiveTexture(GL_TEXTURE1); + glBindTexture(GL_TEXTURE_2D,se->tex_names[1]); + glUniform1i(se->poly_tex_samp_b_index,1); + glActiveTexture(GL_TEXTURE2); + glBindTexture(GL_TEXTURE_2D,se->tex_names[2]); + glUniform1i(se->poly_tex_samp_w_index,2); + glUniform1i(se->poly_bool_textures_index,se->colors[pass] == COLORS_EARTH); + + glEnableVertexAttribArray(se->poly_pos_index); + glBindBuffer(GL_ARRAY_BUFFER,se->vertex_pos_buffer); + glVertexAttribPointer(se->poly_pos_index,3,GL_FLOAT,GL_FALSE,0,0); + + glEnableVertexAttribArray(se->poly_normal_index); + glBindBuffer(GL_ARRAY_BUFFER,se->vertex_normal_buffer); + glVertexAttribPointer(se->poly_normal_index,3,GL_FLOAT,GL_FALSE,0,0); + + for (hemisphere=0; hemispherenum_hemispheres; hemisphere++) + { + glsl_CopyMatrix(mv_mat1,mv_mat); + glsl_Rotate(mv_mat1,hemisphere*180.0f,0.0f,1.0f,0.0f); + for (strip=0; stripstrip_step) + { + angle = (hemisphere == 0 ? -strip : strip+1)*360.0f/NUM_STRIPS; + glsl_CopyMatrix(mv_mat2,mv_mat1); + glsl_Rotate(mv_mat2,angle,0.0f,0.0f,1.0f); + glUniformMatrix4fv(se->poly_mv_index,1,GL_FALSE,mv_mat2); + + index_offset = (2*(hemisphere*NUM_STRIPS+strip)*(NUM_U+1)*(NUM_V+1)* + sizeof(GLfloat)); + + glEnableVertexAttribArray(se->poly_vertex_tex_index); + glBindBuffer(GL_ARRAY_BUFFER,se->vertex_tex_coord_buffer); + glVertexAttribPointer(se->poly_vertex_tex_index,2,GL_FLOAT,GL_FALSE,0, + (const GLvoid *)index_offset); + + if (se->colors[pass] != COLORS_TWOSIDED && + se->colors[pass] != COLORS_EARTH) + { + index_offset = (4*(hemisphere*NUM_STRIPS+strip)*(NUM_U+1)*(NUM_V+1)* + sizeof(GLfloat)); + + glEnableVertexAttribArray(se->poly_colorf_index); + glBindBuffer(GL_ARRAY_BUFFER,se->vertex_colorf_buffer[pass]); + glVertexAttribPointer(se->poly_colorf_index,4,GL_FLOAT,GL_FALSE,0, + (const GLvoid *)index_offset); + + glEnableVertexAttribArray(se->poly_colorb_index); + glBindBuffer(GL_ARRAY_BUFFER,se->vertex_colorb_buffer[pass]); + glVertexAttribPointer(se->poly_colorb_index,4,GL_FLOAT,GL_FALSE,0, + (const GLvoid *)index_offset); + } +#ifdef VERTEXATTRIBARRAY_WORKAROUND + else /* se->colors[0] == COLORS_TWOSIDED || + se->colors[pass] == COLORS_EARTH */ + { + index_offset = (4*(hemisphere*NUM_STRIPS+strip)*(NUM_U+1)*(NUM_V+1)* + sizeof(GLfloat)); + + glEnableVertexAttribArray(se->poly_colorf_index); + glBindBuffer(GL_ARRAY_BUFFER,se->vertex_colorf_buffer[pass]); + glVertexAttribPointer(se->poly_colorf_index,4,GL_FLOAT,GL_FALSE,0, + (const GLvoid *)index_offset); + + glEnableVertexAttribArray(se->poly_colorb_index); + glBindBuffer(GL_ARRAY_BUFFER,se->vertex_colorb_buffer[pass]); + glVertexAttribPointer(se->poly_colorb_index,4,GL_FLOAT,GL_FALSE,0, + (const GLvoid *)index_offset); + } +#endif /* VERTEXATTRIBARRAY_WORKAROUND */ + + if (se->appearance[pass] == APPEARANCE_SOLID) + { + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,se->solid_indices_buffer); + for (i=0; inum_solid_strips; i++) + { + index_offset = se->num_solid_triangles*i*sizeof(GLuint); + glDrawElements(GL_TRIANGLE_STRIP,se->num_solid_triangles, + GL_UNSIGNED_INT,(const GLvoid *)index_offset); + } + } + else if (se->appearance[pass] == APPEARANCE_PARALLEL_BANDS) + { + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,se->parallel_indices_buffer); + for (i=0; inum_parallel_strips; i++) + { + index_offset = se->num_parallel_triangles*i*sizeof(GLuint); + glDrawElements(GL_TRIANGLE_STRIP,se->num_parallel_triangles, + GL_UNSIGNED_INT,(const GLvoid *)index_offset); + } + } + else if (se->appearance[pass] == APPEARANCE_MERIDIAN_BANDS) + { + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,se->meridian_indices_buffer); + for (i=0; inum_meridian_strips; i++) + { + index_offset = se->num_meridian_triangles*i*sizeof(GLuint); + glDrawElements(GL_TRIANGLE_STRIP,se->num_meridian_triangles, + GL_UNSIGNED_INT,(const GLvoid *)index_offset); + } + } + } + } + + if (se->appearance[pass] == APPEARANCE_SOLID) + polys += 2*se->num_hemispheres*8/se->strip_step*(NUM_U+1)*NUM_V; + else if (se->appearance[pass] == APPEARANCE_MERIDIAN_BANDS) + polys += se->num_hemispheres*8/se->strip_step*(NUM_U+1)*NUM_V; + else if (se->appearance[pass] == APPEARANCE_PARALLEL_BANDS) + polys += se->num_hemispheres*8/se->strip_step*NUM_U*(NUM_V+1); + + glDisableVertexAttribArray(se->poly_pos_index); + glDisableVertexAttribArray(se->poly_normal_index); + if (se->colors[pass] != COLORS_TWOSIDED && + se->colors[pass] != COLORS_EARTH) + { + glDisableVertexAttribArray(se->poly_colorf_index); + glDisableVertexAttribArray(se->poly_colorb_index); + } +#ifdef VERTEXATTRIBARRAY_WORKAROUND + else /* !colored */ + { + glDisableVertexAttribArray(se->poly_colorf_index); + glDisableVertexAttribArray(se->poly_colorb_index); + } +#endif /* VERTEXATTRIBARRAY_WORKAROUND */ + glBindBuffer(GL_ARRAY_BUFFER,0); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0); + + glUseProgram(0); + + if (num_passes == 2) + { + /* Copy the rendered image to a texture. */ + glGetIntegerv(GL_DRAW_BUFFER0,&draw_buf); + glGetIntegerv(GL_READ_BUFFER,&read_buf); + glReadBuffer(draw_buf); + glBindTexture(GL_TEXTURE_2D,se->color_textures[pass]); + glCopyTexSubImage2D(GL_TEXTURE_2D,0,0,0,0,0,se->WindW,se->WindH); + glReadBuffer(read_buf); + } + } + + if (num_passes == 2) + { + t = (float)se->turn_step/(float)se->num_turn; + /* Apply an easing function to t. */ + t = (3.0-2.0*t)*t*t; + + glUseProgram(se->blend_shader_program); + + glClearColor(0.0f,0.0f,0.0f,1.0f); + glClearDepth(1.0f); + glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); + + glDisable(GL_DEPTH_TEST); + glDepthMask(GL_FALSE); + glDisable(GL_BLEND); + + glUniform1f(se->blend_t_index,t); + + glActiveTexture(GL_TEXTURE0); + glBindTexture(GL_TEXTURE_2D,se->color_textures[0]); + glUniform1i(se->blend_sampler0_index,0); + + glActiveTexture(GL_TEXTURE1); + glBindTexture(GL_TEXTURE_2D,se->color_textures[1]); + glUniform1i(se->blend_sampler1_index,1); + + glEnableVertexAttribArray(se->blend_vertex_p_index); + glVertexAttribPointer(se->blend_vertex_p_index,2,GL_FLOAT,GL_FALSE, + 2*sizeof(GLfloat),blend_p); + + glEnableVertexAttribArray(se->blend_vertex_t_index); + glVertexAttribPointer(se->blend_vertex_t_index,2,GL_FLOAT,GL_FALSE, + 2*sizeof(GLfloat),blend_t); + + glDrawElements(GL_TRIANGLES,6,GL_UNSIGNED_INT,blend_indices); + + glActiveTexture(GL_TEXTURE0); + + glUseProgram(0); + } + + return polys; +} + +#endif /* HAVE_GLSL */ + + + +void init_sphereeversion_corrugations(ModeInfo *mi) +{ + sphereeversionstruct *se = &sphereeversion[MI_SCREEN(mi)]; + + if (deform_speed == 0.0f) + deform_speed = 10.0f; + + se->alpha = frand(120.0)-60.0; + se->beta = frand(120.0)-60.0; + se->delta = frand(360.0); + + se->anim_state = ANIM_DEFORM; + se->time = 0.0; + se->defdir = 1; + se->turn_step = 0; + se->num_turn = 0; + + se->offset3d[0] = 0.0f; + se->offset3d[1] = 0.0f; + se->offset3d[2] = -3.2f; + + se->sp = calloc(3*(NUM_U+1)*(NUM_V+1),sizeof(float)); + se->sn = calloc(3*(NUM_U+1)*(NUM_V+1),sizeof(float)); + se->colf[0] = calloc(4*2*NUM_STRIPS*(NUM_U+1)*(NUM_U+1),sizeof(float)); + se->colf[1] = calloc(4*2*NUM_STRIPS*(NUM_U+1)*(NUM_U+1),sizeof(float)); + se->colb[0] = calloc(4*2*NUM_STRIPS*(NUM_U+1)*(NUM_U+1),sizeof(float)); + se->colb[1] = calloc(4*2*NUM_STRIPS*(NUM_U+1)*(NUM_U+1),sizeof(float)); + +#ifdef HAVE_GLSL + se->solid_indices = calloc(2*NUM_U*(NUM_V+1),sizeof(float)); + se->parallel_indices = calloc(NUM_U*(NUM_V+1),sizeof(float)); + se->meridian_indices = calloc((NUM_U+1)*NUM_V,sizeof(float)); + se->line_indices = NULL; + + init_glsl(mi); +#endif /* HAVE_GLSL */ + + setup_surface_colors(mi); +#ifdef HAVE_GLSL + se->tex = calloc(4*2*NUM_STRIPS*(NUM_U+1)*(NUM_V+1),sizeof(float)); + gen_textures(mi); + setup_tex_coords(mi); +#endif /* HAVE_GLSL */ +} + + +void display_sphereeversion_corrugations(ModeInfo *mi) +{ + float alpha, beta, delta, dot, a, t, q[4]; + float *colt; + sphereeversionstruct *se = &sphereeversion[MI_SCREEN(mi)]; +#ifdef HAVE_GLSL + GLuint vertex_colort_buffer; +#endif /* HAVE_GLSL */ + + if (!se->button_pressed) + { + if (se->anim_state == ANIM_DEFORM) + { + se->time += se->defdir*deform_speed*0.0001; + if (se->time < 0.0) + { + se->time = 0.0; + se->defdir = -se->defdir; + se->anim_state = ANIM_TURN; + } + if (se->time > 1.0) + { + se->time = 1.0; + se->defdir = -se->defdir; + se->anim_state = ANIM_TURN; + } + if (se->anim_state == ANIM_TURN) + { + /* Convert the current rotation angles to a quaternion. */ + angles_to_quat(se->alpha,se->beta,se->delta,se->qs); + /* Determine random target rotation angles and convert them to the + target quaternion. */ + alpha = frand(120.0)-60.0; + beta = frand(120.0)-60.0; + delta = frand(360.0); + angles_to_quat(alpha,beta,delta,se->qe); + /* Compute the angle between qs and qe. */ + dot = (se->qs[0]*se->qe[0]+se->qs[1]*se->qe[1]+ + se->qs[2]*se->qe[2]+se->qs[3]*se->qe[3]); + if (dot < 0.0f) + { + se->qe[0] = -se->qe[0]; + se->qe[1] = -se->qe[1]; + se->qe[2] = -se->qe[2]; + se->qe[3] = -se->qe[3]; + dot = -dot; + } + a = 180.0f/M_PI_F*acosf(dot); + se->num_turn = ceilf(a/TURN_STEP); + + /* Change the parameters randomly after one full eversion when a + turn to the new orientation starts. */ + /* Copy the current display modes to the values of the second pass. */ + se->display_mode[1] = se->display_mode[0]; + se->appearance[1] = se->appearance[0]; + se->colors[1] = se->colors[0]; + /* Swap the front and back color buffers. */ + colt = se->colf[1]; + se->colf[1] = se->colf[0]; + se->colf[0] = colt; + colt = se->colb[1]; + se->colb[1] = se->colb[0]; + se->colb[0] = colt; +#ifdef HAVE_GLSL + /* Swap the OpenGL front and back color buffers. */ + if (se->use_shaders) + { + vertex_colort_buffer = se->vertex_colorf_buffer[1]; + se->vertex_colorf_buffer[1] = se->vertex_colorf_buffer[0]; + se->vertex_colorf_buffer[0] = vertex_colort_buffer; + vertex_colort_buffer = se->vertex_colorb_buffer[1]; + se->vertex_colorb_buffer[1] = se->vertex_colorb_buffer[0]; + se->vertex_colorb_buffer[0] = vertex_colort_buffer; + } +#endif /* HAVE_GLSL */ + /* Randomly select new display modes for the main pass. */ + if (se->random_display_mode) + se->display_mode[0] = random() % NUM_DISPLAY_MODES; + if (se->random_appearance) + se->appearance[0] = random() % NUM_APPEARANCES; + if (se->random_colors) + se->colors[0] = random() % NUM_COLORS; + setup_surface_colors(mi); + } + } + else /* se->anim_state == ANIM_TURN */ + { + t = (float)se->turn_step/(float)se->num_turn; + /* Apply an easing function to t. */ + t = (3.0-2.0*t)*t*t; + quat_slerp(t,se->qs,se->qe,q); + quat_to_angles(q,&se->alpha,&se->beta,&se->delta); + se->turn_step++; + if (se->turn_step > se->num_turn) + { + se->turn_step = 0; + se->anim_state = ANIM_DEFORM; + } + } + + if (se->anim_state == ANIM_DEFORM) + { + se->alpha += speed_x*se->speed_scale; + if (se->alpha >= 360.0f) + se->alpha -= 360.0f; + se->beta += speed_y*se->speed_scale; + if (se->beta >= 360.0f) + se->beta -= 360.0f; + se->delta += speed_z*se->speed_scale; + if (se->delta >= 360.0f) + se->delta -= 360.0f; + } + } + +#ifdef HAVE_GLSL + if (se->use_shaders) + mi->polygon_count = outside_in_pf(mi); + else +#endif /* HAVE_GLSL */ + mi->polygon_count = outside_in_ff(mi); +} + + +#endif /* USE_GL */ diff --git a/hacks/glx/sphereeversion.c b/hacks/glx/sphereeversion.c index cd58275c..51186d42 100644 --- a/hacks/glx/sphereeversion.c +++ b/hacks/glx/sphereeversion.c @@ -7,7 +7,7 @@ static const char sccsid[] = "@(#)sphereeversion.c 1.1 20/03/22 xlockmore"; #endif -/* Copyright (c) 2020-2021 Carsten Steger . */ +/* Copyright (c) 2020-2022 Carsten Steger . */ /* * Permission to use, copy, modify, and distribute this software and its @@ -33,6 +33,8 @@ static const char sccsid[] = "@(#)sphereeversion.c 1.1 20/03/22 xlockmore"; * C. Steger - 21/01/03: Added per-fragment shading * C. Steger - 21/01/05: Added blending between visualization modes using * multiple render passes + * C. Steger - 21/12/23: Added the earth color mode + * C. Steger - 22/02/25: Added the corrugations sphere eversion */ /* @@ -41,89 +43,12 @@ static const char sccsid[] = "@(#)sphereeversion.c 1.1 20/03/22 xlockmore"; * the deformed sphere is allowed to intersect itself transversally. * However, no creases or pinch points are allowed to occur. * - * The deformed sphere can be projected to the screen either - * perspectively or orthographically. - * - * There are three display modes for the sphere: solid, transparent, - * or random. If random mode is selected, the mode is changed each - * time an eversion has been completed. - * - * The appearance of the sphere can be as a solid object, as a set of - * see-through bands, or random. The bands can be parallel bands or - * meridian bands, i.e., bands that run along the parallels (lines of - * latitude) or bands that run along the meridians (lines of - * longitude) of the sphere. If random mode is selected, the - * appearance is changed each time an eversion has been completed. - * - * It is also possible to display a graticule (i.e., a coordinate grid - * consisting of parallel and meridian lines) on top of the surface. - * The graticule mode can be set to on, off, or random. If random - * mode is selected, the graticule mode is changed each time an - * eversion has been completed. - * - * It is possible to define a surface order of the sphere eversion as - * random or as a value between 2 and 5. This determines the the - * complexity of the deformation. For higher surface orders, some - * z-fighting might occur around the central stage of the eversion, - * which might lead to some irregular flickering of the displayed - * surface if it is displayed as a solid object. For odd surface - * orders, z-fighting will occur very close to the central stage of - * the eversion since the deformed sphere is a doubly covered Boy - * surface (for surface order 3) or a doubly covered generalized Boy - * surface (for surface order 5) in this case. If you find this - * distracting, you should set the surface order to 2. If a random - * surface order is selected, the surface order is changed each time - * an eversion has been completed. - * - * The colors with with the sphere is drawn can be set to two-sided, - * parallel, meridian, or random. In two-sided mode, the sphere is - * drawn with red on one side and green on the other side. In - * parallel mode, the sphere is displayed with colors that run from - * red to cyan on one side of the surface and from green to violet on - * the other side. The colors are aligned with the parallels of the - * sphere in this mode. In meridian mode, the the sphere is displayed - * with colors that run from red to white to cyan to black and back to - * red on one side of the surface and from green to white to violet to - * black and back to green on the other side. The colors are aligned - * with the meridians of the sphere in this mode. If random mode is - * selected, the color scheme is changed each time an eversion has - * been completed. - * - * By default, the sphere is rotated to a new viewing position each - * time an eversion has been completed. In addition, it is possible - * to rotate the sphere while it is deforming. The rotation speed for - * each of the three coordinate axes around which the sphere rotates - * can be chosen arbitrarily. For best effects, however, it is - * suggested to rotate only around the z axis while the sphere is - * deforming. - * - * This program is inspired by the following paper: Adam Bednorz, - * Witold Bednorz: "Analytic sphere eversion using ruled surfaces", - * Differential Geometry and its Applications 64:59-79, 2019. + * Two sversion methods are supported: analytic and corrugations. For + * a detailed description of the two methods, see the files + * sphereeversion-analytic.c and sphereeversion-corrugations.c. */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif - -#define DISP_SURFACE 0 -#define DISP_TRANSPARENT 1 -#define NUM_DISPLAY_MODES 2 - -#define APPEARANCE_SOLID 0 -#define APPEARANCE_PARALLEL_BANDS 1 -#define APPEARANCE_MERIDIAN_BANDS 2 -#define NUM_APPEARANCES 3 - -#define COLORS_TWOSIDED 0 -#define COLORS_PARALLEL 1 -#define COLORS_MERIDIAN 2 -#define NUM_COLORS 3 - -#define DISP_PERSPECTIVE 0 -#define DISP_ORTHOGRAPHIC 1 -#define NUM_DISP_MODES 2 - +#define DEF_EVERSION_METHOD "random" #define DEF_DISPLAY_MODE "random" #define DEF_APPEARANCE "random" #define DEF_GRATICULE "random" @@ -134,15 +59,10 @@ static const char sccsid[] = "@(#)sphereeversion.c 1.1 20/03/22 xlockmore"; #define DEF_SPEEDZ "0.0" #define DEF_DEFORM_SPEED "10.0" #define DEF_SURFACE_ORDER "random" +#define DEF_LUNES "lunes-8" +#define DEF_HEMISPHERES "hemispheres-2" -/* For some strange reason, the color buffer must be initialized - and used on macOS. Otherwise one- and two-sided lighting will - not work. */ -#if (defined(HAVE_COCOA) || defined(__APPLE__)) && !defined(HAVE_IPHONE) -#define VERTEXATTRIBARRAY_WORKAROUND -#endif - #ifdef STANDALONE # define DEFAULTS "*delay: 10000 \n" \ "*showFPS: False \n" \ @@ -156,9 +76,12 @@ static const char sccsid[] = "@(#)sphereeversion.c 1.1 20/03/22 xlockmore"; #ifdef USE_GL -#include "glsl-utils.h" -#include "gltrackball.h" -#include "pow2.h" +#include "sphereeversion.h" + +#include "images/gen/earth_png.h" +#include "images/gen/earth_night_png.h" +#include "images/gen/earth_water_png.h" +#include "ximage-loader.h" #include @@ -173,192 +96,86 @@ ModStruct sphereeversion_description = #endif -static char *mode; -static char *appear; -static char *color_mode; -static char *graticule; -static char *proj; -static float speed_x; -static float speed_y; -static float speed_z; -static float deform_speed; -static char *surface_order; +char *eversion_method; +char *mode; +char *appear; +char *color_mode; +char *graticule; +char *proj; +float speed_x; +float speed_y; +float speed_z; +float deform_speed; +char *surface_order; +char *lunes; +char *hemispheres; static XrmOptionDescRec opts[] = { - {"-mode", ".displayMode", XrmoptionSepArg, 0 }, - {"-surface", ".displayMode", XrmoptionNoArg, "surface" }, - {"-transparent", ".displayMode", XrmoptionNoArg, "transparent" }, - {"-appearance", ".appearance", XrmoptionSepArg, 0 }, - {"-solid", ".appearance", XrmoptionNoArg, "solid" }, - {"-parallel-bands", ".appearance", XrmoptionNoArg, "parallel-bands" }, - {"-meridian-bands", ".appearance", XrmoptionNoArg, "meridian-bands" }, - {"-graticule", ".graticule", XrmoptionSepArg, 0 }, - {"-colors", ".colors", XrmoptionSepArg, 0 }, - {"-twosided-colors", ".colors", XrmoptionNoArg, "two-sided" }, - {"-parallel-colors", ".colors", XrmoptionNoArg, "parallel" }, - {"-meridian-colors", ".colors", XrmoptionNoArg, "meridian" }, - {"-projection", ".projection", XrmoptionSepArg, 0 }, - {"-perspective", ".projection", XrmoptionNoArg, "perspective" }, - {"-orthographic", ".projection", XrmoptionNoArg, "orthographic" }, - {"-speed-x", ".speedx", XrmoptionSepArg, 0 }, - {"-speed-y", ".speedy", XrmoptionSepArg, 0 }, - {"-speed-z", ".speedz", XrmoptionSepArg, 0 }, - {"-deformation-speed", ".deformSpeed", XrmoptionSepArg, 0 }, - {"-surface-order", ".surfaceOrder", XrmoptionSepArg, 0 }, + {"-eversion-method", ".eversionMethod", XrmoptionSepArg, 0 }, + {"-analytic", ".eversionMethod", XrmoptionNoArg, "analytic" }, + {"-corrugations", ".eversionMethod", XrmoptionNoArg, "corrugations" }, + {"-mode", ".displayMode", XrmoptionSepArg, 0 }, + {"-surface", ".displayMode", XrmoptionNoArg, "surface" }, + {"-transparent", ".displayMode", XrmoptionNoArg, "transparent" }, + {"-appearance", ".appearance", XrmoptionSepArg, 0 }, + {"-solid", ".appearance", XrmoptionNoArg, "solid" }, + {"-parallel-bands", ".appearance", XrmoptionNoArg, "parallel-bands" }, + {"-meridian-bands", ".appearance", XrmoptionNoArg, "meridian-bands" }, + {"-colors", ".colors", XrmoptionSepArg, 0 }, + {"-twosided-colors", ".colors", XrmoptionNoArg, "two-sided" }, + {"-parallel-colors", ".colors", XrmoptionNoArg, "parallel" }, + {"-meridian-colors", ".colors", XrmoptionNoArg, "meridian" }, + {"-earth-colors" , ".colors", XrmoptionNoArg, "earth" }, + {"-projection", ".projection", XrmoptionSepArg, 0 }, + {"-perspective", ".projection", XrmoptionNoArg, "perspective" }, + {"-orthographic", ".projection", XrmoptionNoArg, "orthographic" }, + {"-graticule", ".graticule", XrmoptionSepArg, 0 }, + {"-speed-x", ".speedx", XrmoptionSepArg, 0 }, + {"-speed-y", ".speedy", XrmoptionSepArg, 0 }, + {"-speed-z", ".speedz", XrmoptionSepArg, 0 }, + {"-deformation-speed", ".deformSpeed", XrmoptionSepArg, 0 }, + {"-surface-order", ".surfaceOrder", XrmoptionSepArg, 0 }, + {"-lunes-1", ".lunes", XrmoptionNoArg, "lunes-1" }, + {"-lunes-2", ".lunes", XrmoptionNoArg, "lunes-2" }, + {"-lunes-4", ".lunes", XrmoptionNoArg, "lunes-4" }, + {"-lunes-8", ".lunes", XrmoptionNoArg, "lunes-8" }, + {"-hemispheres-1", ".hemispheres", XrmoptionNoArg, "hemispheres-1" }, + {"-hemispheres-2", ".hemispheres", XrmoptionNoArg, "hemispheres-2" }, }; static argtype vars[] = { - { &mode, "displayMode", "DisplayMode", DEF_DISPLAY_MODE, t_String }, - { &appear, "appearance", "Appearance", DEF_APPEARANCE, t_String }, - { &graticule, "graticule", "Graticule", DEF_GRATICULE, t_String }, - { &color_mode, "colors", "Colors", DEF_COLORS, t_String }, - { &surface_order, "surfaceOrder", "SurfaceOrder", DEF_SURFACE_ORDER, t_String }, - { &proj, "projection", "Projection", DEF_PROJECTION, t_String }, - { &speed_x, "speedx", "Speedx", DEF_SPEEDX, t_Float}, - { &speed_y, "speedy", "Speedy", DEF_SPEEDY, t_Float}, - { &speed_z, "speedz", "Speedz", DEF_SPEEDZ, t_Float}, - { &deform_speed, "deformSpeed", "DeformSpeed", DEF_DEFORM_SPEED, t_Float}, + { &eversion_method, "eversionMethod", "EversionMethod", DEF_EVERSION_METHOD, t_String }, + { &mode, "displayMode", "DisplayMode", DEF_DISPLAY_MODE, t_String }, + { &appear, "appearance", "Appearance", DEF_APPEARANCE, t_String }, + { &color_mode, "colors", "Colors", DEF_COLORS, t_String }, + { &proj, "projection", "Projection", DEF_PROJECTION, t_String }, + { &graticule, "graticule", "Graticule", DEF_GRATICULE, t_String }, + { &speed_x, "speedx", "Speedx", DEF_SPEEDX, t_Float}, + { &speed_y, "speedy", "Speedy", DEF_SPEEDY, t_Float}, + { &speed_z, "speedz", "Speedz", DEF_SPEEDZ, t_Float}, + { &deform_speed, "deformSpeed", "DeformSpeed", DEF_DEFORM_SPEED, t_Float}, + { &surface_order, "surfaceOrder", "SurfaceOrder", DEF_SURFACE_ORDER, t_String }, + { &lunes, "lunes", "Lunes", DEF_LUNES, t_String }, + { &hemispheres, "hemispheres", "Hemispheres", DEF_HEMISPHERES, t_String }, }; ENTRYPOINT ModeSpecOpt sphereeversion_opts = {sizeof opts / sizeof opts[0], opts, sizeof vars / sizeof vars[0], vars, NULL}; -/* Shape parameters for the Bednorz sphere eversion. */ -#define BEDNORZ_OMEGA 2.0 -#define BEDNORZ_Q (2.0/3.0) -#define BEDNORZ_ETA_MIN (3.0/4.0) -#define BEDNORZ_BETA_MAX 0.1 -#define BEDNORZ_ALPHA 1.0 -#define BEDNORZ_EPS2 0.001 -#define BEDNORZ_EPS3 0.002 -#define BEDNORZ_EPS4 0.001 -#define BEDNORZ_EPS5 0.002 - -#define BEDNORZ_TAU1 (1.0/BEDNORZ_Q) -#define BEDNORZ_TAU2 2.5 -#define BEDNORZ_TAU3 4.5 -#define BEDNORZ_TAU4 6.0 - -#define BEDNORZ_TAU_MIN (-BEDNORZ_TAU4) -#define BEDNORZ_TAU_MAX (BEDNORZ_TAU4) - -/* Number of subdivisions of the surface */ -#define NUMTH 256 -#define NUMPH 256 - -/* Number of subdivisions between grid lines */ -#define NUMGRID 32 - -/* Number of subdivisions per band */ -#define NUMBDIR 16 -#define NUMBDIST 16 - -/* Animation states */ -#define ANIM_DEFORM 0 -#define ANIM_TURN 1 - -/* Angle of a single turn step */ -#define TURN_STEP 1.0 - -typedef struct { - int n; - double kappa; - double omega; - double t; - double p; - double q; - double xi; - double eta; - double alpha; - double beta; - double gamma; - double lambda; - double eps; -} bednorz_shape_par; - - -typedef struct { - GLint WindH, WindW; - GLXContext *glx_context; - /* Options */ - int display_mode[2]; - Bool random_display_mode; - int appearance[2]; - Bool random_appearance; - Bool graticule[2]; - Bool random_graticule; - int colors[2]; - Bool random_colors; - int projection; - /* 3D rotation angles */ - float alpha, beta, delta; - /* Animation state */ - int anim_state; - /* Deformation parameters */ - float tau; - int defdir; - /* Turning parameters */ - int turn_step; - int num_turn; - float qs[4], qe[4]; - /* Two global shape parameters of the Bednorz sphere eversion */ - float eta_min, beta_max; - /* The order of the Bednorz sphere eversion */ - int g; - Bool random_g; - /* The viewing offset in 3d */ - float offset3d[3]; - /* The 3d coordinates of the surface and the corresponding normal vectors */ - float *se; - float *sen; - /* The precomputed colors of the surface */ - float *colf[2]; - float *colb[2]; - /* Aspect ratio of the current window */ - float aspect; - /* Trackball states */ - trackball_state *trackball; - Bool button_pressed; - /* A random factor to modify the rotation speeds */ - float speed_scale; -#ifdef HAVE_GLSL - GLuint *solid_indices, *parallel_indices; - GLuint *meridian_indices, *line_indices; - Bool use_shaders, buffers_initialized; - GLuint poly_shader_program; - GLint poly_pos_index, poly_normal_index; - GLint poly_colorf_index, poly_colorb_index; - GLint poly_mv_index, poly_proj_index; - GLint poly_glbl_ambient_index, poly_lt_ambient_index; - GLint poly_lt_diffuse_index, poly_lt_specular_index; - GLint poly_lt_direction_index, poly_lt_halfvect_index; - GLint poly_front_ambient_index, poly_back_ambient_index; - GLint poly_front_diffuse_index, poly_back_diffuse_index; - GLint poly_specular_index, poly_shininess_index; - GLuint line_shader_program; - GLint line_pos_index, line_color_index; - GLint line_mv_index, line_proj_index; - GLint max_tex_size; - GLuint color_textures[2]; - GLuint blend_shader_program; - GLint blend_vertex_p_index, blend_vertex_t_index; - GLint blend_t_index, blend_sampler0_index, blend_sampler1_index; - GLuint vertex_pos_buffer, vertex_normal_buffer; - GLuint vertex_colorf_buffer[2], vertex_colorb_buffer[2]; - GLuint solid_indices_buffer, parallel_indices_buffer; - GLuint meridian_indices_buffer, line_indices_buffer; - GLint num_solid_strips, num_solid_triangles; - GLint num_parallel_strips, num_parallel_triangles; - GLint num_meridian_strips, num_meridian_triangles; - GLint num_lines; -#endif /* HAVE_GLSL */ -} sphereeversionstruct; +sphereeversionstruct *sphereeversion = (sphereeversionstruct *) NULL; -static sphereeversionstruct *sphereeversion = (sphereeversionstruct *) NULL; + +/* + *----------------------------------------------------------------------------- + *----------------------------------------------------------------------------- + * Functions that are used in both sphere eversion methods + *----------------------------------------------------------------------------- + *----------------------------------------------------------------------------- + */ #ifdef HAVE_GLSL @@ -381,24 +198,29 @@ static const GLchar *poly_vertex_shader_attribs_2_1 = "attribute vec3 VertexNormal;\n" "attribute vec4 VertexColorF;\n" "attribute vec4 VertexColorB;\n" + "attribute vec4 VertexTexCoord;\n" "\n" "varying vec3 Normal;\n" "varying vec4 ColorF;\n" "varying vec4 ColorB;\n" + "varying vec4 TexCoord;\n" "\n"; static const GLchar *poly_vertex_shader_attribs_3_0 = "in vec3 VertexPosition;\n" "in vec3 VertexNormal;\n" "in vec4 VertexColorF;\n" "in vec4 VertexColorB;\n" + "in vec4 VertexTexCoord;\n" "\n" "out vec3 Normal;\n" "out vec4 ColorF;\n" "out vec4 ColorB;\n" + "out vec4 TexCoord;\n" "\n"; static const GLchar *poly_vertex_shader_main = "uniform mat4 MatModelView;\n" "uniform mat4 MatProj;\n" + "uniform bool BoolTextures;\n" "\n" "void main (void)\n" "{\n" @@ -407,6 +229,8 @@ static const GLchar *poly_vertex_shader_main = " Normal = normalize(MatModelView*vec4(VertexNormal,0.0f)).xyz;\n" " vec4 Position = MatModelView*vec4(VertexPosition,1.0f);\n" " gl_Position = MatProj*Position;\n" + " if (BoolTextures)\n" + " TexCoord = VertexTexCoord;\n" "}\n"; /* The fragment shader code is composed of code fragments that depend on @@ -417,11 +241,13 @@ static const GLchar *poly_fragment_shader_attribs_2_1 = "varying vec3 Normal;\n" "varying vec4 ColorF;\n" "varying vec4 ColorB;\n" + "varying vec4 TexCoord;\n" "\n"; static const GLchar *poly_fragment_shader_attribs_3_0 = "in vec3 Normal;\n" "in vec4 ColorF;\n" "in vec4 ColorB;\n" + "in vec4 TexCoord;\n" "\n" "out vec4 FragColor;\n" "\n"; @@ -433,6 +259,10 @@ static const GLchar *poly_fragment_shader_main = "uniform vec4 MatFrontDiffuse, MatBackDiffuse;\n" "uniform vec4 MatSpecular;\n" "uniform float MatShininess;\n" + "uniform bool BoolTextures;\n" + "uniform sampler2D TextureSamplerFront;" + "uniform sampler2D TextureSamplerBack;" + "uniform sampler2D TextureSamplerWater;" "\n" "void main (void)\n" "{\n" @@ -465,12 +295,39 @@ static const GLchar *poly_fragment_shader_main = " ambientLighting = ambientColor*LtAmbient;\n" " diffuseReflection = LtDiffuse*diffuseColor*ndotl;\n" " specularReflection = LtSpecular*MatSpecular*pf;\n" - " color = sceneColor+ambientLighting+diffuseReflection+\n" - " specularReflection;\n"; + " color = sceneColor+ambientLighting+diffuseReflection;\n"; static const GLchar *poly_fragment_shader_out_2_1 = + " if (BoolTextures)\n" + " {\n" + " if (gl_FrontFacing)\n" + " {\n" + " color *= texture2D(TextureSamplerFront,TexCoord.st);\n" + " specularReflection *= texture2D(TextureSamplerWater,TexCoord.st);\n" + " }\n" + " else\n" + " {\n" + " color *= texture2D(TextureSamplerBack,TexCoord.st);\n" + " specularReflection *= 0.0f;\n" + " }\n" + " }\n" + " color += specularReflection;\n" " gl_FragColor = clamp(color,0.0f,1.0f);\n" "}\n"; static const GLchar *poly_fragment_shader_out_3_0 = + " if (BoolTextures)\n" + " {\n" + " if (gl_FrontFacing)\n" + " {\n" + " color *= texture(TextureSamplerFront,TexCoord.st);\n" + " specularReflection *= texture(TextureSamplerWater,TexCoord.st);\n" + " }\n" + " else\n" + " {\n" + " color *= texture(TextureSamplerBack,TexCoord.st);\n" + " specularReflection *= 0.0f;\n" + " }\n" + " }\n" + " color += specularReflection;\n" " FragColor = clamp(color,0.0f,1.0f);\n" "}\n"; @@ -572,14 +429,14 @@ static const GLchar *blend_fragment_shader_out_3_0 = /* Add a rotation around the x-axis to the matrix m. */ -static void rotatex(float m[3][3], float phi) +void rotatex(float m[3][3], float phi) { float c, s, u, v; int i; - phi *= M_PI/180.0; - c = cos(phi); - s = sin(phi); + phi *= M_PI_F/180.0f; + c = cosf(phi); + s = sinf(phi); for (i=0; i<3; i++) { u = m[i][1]; @@ -591,14 +448,14 @@ static void rotatex(float m[3][3], float phi) /* Add a rotation around the y-axis to the matrix m. */ -static void rotatey(float m[3][3], float phi) +void rotatey(float m[3][3], float phi) { float c, s, u, v; int i; - phi *= M_PI/180.0; - c = cos(phi); - s = sin(phi); + phi *= M_PI_F/180.0f; + c = cosf(phi); + s = sinf(phi); for (i=0; i<3; i++) { u = m[i][0]; @@ -610,14 +467,14 @@ static void rotatey(float m[3][3], float phi) /* Add a rotation around the z-axis to the matrix m. */ -static void rotatez(float m[3][3], float phi) +void rotatez(float m[3][3], float phi) { float c, s, u, v; int i; - phi *= M_PI/180.0; - c = cos(phi); - s = sin(phi); + phi *= M_PI_F/180.0f; + c = cosf(phi); + s = sinf(phi); for (i=0; i<3; i++) { u = m[i][0]; @@ -629,7 +486,7 @@ static void rotatez(float m[3][3], float phi) /* Compute the rotation matrix m from the rotation angles. */ -static void rotateall(float al, float be, float de, float m[3][3]) +void rotateall(float al, float be, float de, float m[3][3]) { int i, j; @@ -643,7 +500,7 @@ static void rotateall(float al, float be, float de, float m[3][3]) /* Multiply two rotation matrices: o=m*n. */ -static void mult_rotmat(float m[3][3], float n[3][3], float o[3][3]) +void mult_rotmat(float m[3][3], float n[3][3], float o[3][3]) { int i, j, k; @@ -660,62 +517,41 @@ static void mult_rotmat(float m[3][3], float n[3][3], float o[3][3]) /* Compute 3D rotation angles from a unit quaternion. */ -static void quat_to_angles(float q[4], float *alpha, float *beta, float *delta) +void quat_to_angles(float q[4], float *alpha, float *beta, float *delta) { - double r00, r01, r02, r12, r22; + float r00, r01, r02, r12, r22; r00 = q[0]*q[0]+q[1]*q[1]-q[2]*q[2]-q[3]*q[3]; - r01 = 2.0*(q[1]*q[2]-q[0]*q[3]); - r02 = 2.0*(q[1]*q[3]+q[0]*q[2]); - r12 = 2.0*(q[2]*q[3]-q[0]*q[1]); + r01 = 2.0f*(q[1]*q[2]-q[0]*q[3]); + r02 = 2.0f*(q[1]*q[3]+q[0]*q[2]); + r12 = 2.0f*(q[2]*q[3]-q[0]*q[1]); r22 = q[0]*q[0]-q[1]*q[1]-q[2]*q[2]+q[3]*q[3]; - *alpha = atan2(-r12,r22)*180.0/M_PI; - *beta = atan2(r02,sqrt(r00*r00+r01*r01))*180.0/M_PI; - *delta = atan2(-r01,r00)*180.0/M_PI; -} - - -/* Compute a 3D rotation matrix from an xscreensaver unit quaternion. Note - that xscreensaver has a different convention for unit quaternions than - the one that is used in this hack. */ -static void quat_to_rotmat(float p[4], float m[3][3]) -{ - float al, be, de; - double r00, r01, r02, r12, r22; - - r00 = 1.0-2.0*(p[1]*p[1]+p[2]*p[2]); - r01 = 2.0*(p[0]*p[1]+p[2]*p[3]); - r02 = 2.0*(p[2]*p[0]-p[1]*p[3]); - r12 = 2.0*(p[1]*p[2]+p[0]*p[3]); - r22 = 1.0-2.0*(p[1]*p[1]+p[0]*p[0]); - - al = atan2(-r12,r22)*180.0/M_PI; - be = atan2(r02,sqrt(r00*r00+r01*r01))*180.0/M_PI; - de = atan2(-r01,r00)*180.0/M_PI; - rotateall(al,be,de,m); + *alpha = atan2f(-r12,r22)*180.0f/M_PI_F; + *beta = atan2f(r02,sqrtf(r00*r00+r01*r01))*180.0f/M_PI_F; + *delta = atan2f(-r01,r00)*180.0f/M_PI_F; } /* Compute a quaternion from angles in degrees. */ -static void angles_to_quat(float alpha, float beta, float delta, float p[4]) +void angles_to_quat(float alpha, float beta, float delta, float p[4]) { - alpha *= M_PI/180.0; - beta *= M_PI/180.0; - delta *= M_PI/180.0; - p[0] = (cos(0.5*alpha)*cos(0.5*beta)*cos(0.5*delta)- - sin(0.5*alpha)*sin(0.5*beta)*sin(0.5*delta)); - p[1] = (sin(0.5*alpha)*cos(0.5*beta)*cos(0.5*delta)+ - cos(0.5*alpha)*sin(0.5*beta)*sin(0.5*delta)); - p[2] = (cos(0.5*alpha)*sin(0.5*beta)*cos(0.5*delta)- - sin(0.5*alpha)*cos(0.5*beta)*sin(0.5*delta)); - p[3] = (cos(0.5*alpha)*cos(0.5*beta)*sin(0.5*delta)+ - sin(0.5*alpha)*sin(0.5*beta)*cos(0.5*delta)); + alpha *= M_PI_F/180.0f; + beta *= M_PI_F/180.0f; + delta *= M_PI_F/180.0f; + p[0] = (cosf(0.5f*alpha)*cosf(0.5f*beta)*cosf(0.5f*delta)- + sinf(0.5f*alpha)*sinf(0.5f*beta)*sinf(0.5f*delta)); + p[1] = (sinf(0.5f*alpha)*cosf(0.5f*beta)*cosf(0.5f*delta)+ + cosf(0.5f*alpha)*sinf(0.5f*beta)*sinf(0.5f*delta)); + p[2] = (cosf(0.5f*alpha)*sinf(0.5f*beta)*cosf(0.5f*delta)- + sinf(0.5f*alpha)*cosf(0.5f*beta)*sinf(0.5f*delta)); + p[3] = (cosf(0.5f*alpha)*cosf(0.5f*beta)*sinf(0.5f*delta)+ + sinf(0.5f*alpha)*sinf(0.5f*beta)*cosf(0.5f*delta)); } /* Perform a spherical linear interpolation between two quaternions. */ -static void quat_slerp(float t, float qs[4], float qe[4], float q[4]) +void quat_slerp(float t, float qs[4], float qe[4], float q[4]) { double cos_t, sin_t, alpha, beta, theta, phi, l; @@ -747,14 +583,15 @@ static void quat_slerp(float t, float qs[4], float qe[4], float q[4]) /* Compute a fully saturated and bright color based on an angle and a color rotation matrix. */ -static void color(sphereeversionstruct *se, float angle, float mat[3][3], - float colf[4], float colb[4]) +void color(sphereeversionstruct *se, float angle, const float mat[3][3], + float colf[4], float colb[4]) { float ca, sa; float m; ca = cosf(angle); sa = sinf(angle); + colf[0] = ca*mat[0][0]+sa*mat[0][2]; colf[1] = ca*mat[1][0]+sa*mat[1][2]; colf[2] = ca*mat[2][0]+sa*mat[2][2]; @@ -767,9 +604,9 @@ static void color(sphereeversionstruct *se, float angle, float mat[3][3], else colf[3] = 1.0f; - colb[0] = ca*mat[0][1]+sa*mat[0][2]; - colb[1] = ca*mat[1][1]+sa*mat[1][2]; - colb[2] = ca*mat[2][1]+sa*mat[2][2]; + colb[0] = -ca*mat[0][1]-sa*mat[0][2]; + colb[1] = -ca*mat[1][1]-sa*mat[1][2]; + colb[2] = -ca*mat[2][1]-sa*mat[2][2]; m = 0.5f/fmaxf(fmaxf(fabsf(colb[0]),fabsf(colb[1])),fabsf(colb[2])); colb[0] = m*colb[0]+0.5f; colb[1] = m*colb[1]+0.5f; @@ -781,1787 +618,61 @@ static void color(sphereeversionstruct *se, float angle, float mat[3][3], } -/* Compute the cross product between the vectors a and b. */ -static inline void cross(float a[3], float b[3], float c[3]) -{ - c[0] = a[1]*b[2]-a[2]*b[1]; - c[1] = a[2]*b[0]-a[0]*b[2]; - c[2] = a[0]*b[1]-a[1]*b[0]; -} - - -/* Compute x^n for integers 0 <= n <= 11 efficiently. */ -static inline double ipow(double x, int n) -{ - double x2, x4, x8; - - switch (n) - { - case 0: - return 1.0; - case 1: - return x; - case 2: - x2 = x*x; - return x2; - case 3: - x2 = x*x; - return x2*x; - case 4: - x2 = x*x; - x4 = x2*x2; - return x4; - case 5: - x2 = x*x; - x4 = x2*x2; - return x4*x; - case 6: - x2 = x*x; - x4 = x2*x2; - return x4*x2; - case 7: - x2 = x*x; - x4 = x2*x2; - return x4*x2*x; - case 8: - x2 = x*x; - x4 = x2*x2; - x8 = x4*x4; - return x8; - case 9: - x2 = x*x; - x4 = x2*x2; - x8 = x4*x4; - return x8*x; - case 10: - x2 = x*x; - x4 = x2*x2; - x8 = x4*x4; - return x8*x2; - case 11: - x2 = x*x; - x4 = x2*x2; - x8 = x4*x4; - return x8*x2*x; - default: - return pow(x,n); - } -} - - -/* Compute the Bednorz shape parameter kappa based on the eversion order n. */ -static inline double bednorz_get_kappa(int n) -{ - return (n-1.0)/(2.0*n); -} - - -/* Compute the Bednorz shape parameter t based on the deformation - parameter tau. */ -static inline double bednorz_get_t(double tau) -{ - return (tau >= BEDNORZ_TAU1 ? - BEDNORZ_TAU1 : - (tau <= -BEDNORZ_TAU1 ? - -BEDNORZ_TAU1 : - tau)); -} - - -/* Compute the Bednorz shape parameter q based on the deformation - parameter tau. */ -static inline double bednorz_get_q(double tau) -{ - double abs_tau; - - abs_tau = fabs(tau); - return (abs_tau < BEDNORZ_TAU1 ? - 0.0 : - (abs_tau < BEDNORZ_TAU2 ? - BEDNORZ_Q*(abs_tau-BEDNORZ_TAU1)/(BEDNORZ_TAU2-BEDNORZ_TAU1) : - BEDNORZ_Q)); -} - - -/* Compute the Bednorz shape parameter p based on the deformation - parameter tau. */ -static inline double bednorz_get_p(double tau) -{ - return 1.0-fabs(bednorz_get_q(tau)*bednorz_get_t(tau)); -} - - -/* Compute the Bednorz shape parameter xi based on the deformation - parameter tau. */ -static inline double bednorz_get_xi(double tau) -{ - double abs_tau; - - abs_tau = fabs(tau); - return (abs_tau < BEDNORZ_TAU2 ? - 1.0 : - (abs_tau < BEDNORZ_TAU3 ? - (BEDNORZ_TAU3-abs_tau)/(BEDNORZ_TAU3-BEDNORZ_TAU2) : - 0.0)); -} - - -/* Compute the Bednorz shape parameter eta based on the deformation - parameter tau and the shape parameter eta_min. */ -static inline double bednorz_get_eta(double tau, double eta_min) -{ - double abs_tau; - - abs_tau = fabs(tau); - return (abs_tau < BEDNORZ_TAU2 ? - eta_min : - (abs_tau < BEDNORZ_TAU3 ? - (eta_min+(1.0-eta_min)* - (abs_tau-BEDNORZ_TAU2)/(BEDNORZ_TAU3-BEDNORZ_TAU2)) : - 1.0)); -} - - -/* Compute the Bednorz shape parameter alpha based on the deformation - parameter tau. */ -static inline double bednorz_get_alpha(double tau) -{ - double xi; - - xi = bednorz_get_xi(tau); - return BEDNORZ_ALPHA*ipow(xi,2); -} - - -/* Compute the Bednorz shape parameter beta based on the deformation - parameter tau and the shape parameter beta_max. */ -static inline double bednorz_get_beta(double tau, double beta_max) -{ - double xi; - - xi = bednorz_get_xi(tau); - return ipow(1.0-xi,2)+beta_max*ipow(xi,3); -} - - -/* Compute the Bednorz shape parameter gamma based on the shape - parameters alpha and beta. */ -static inline double bednorz_get_gamma(double alpha, double beta) -{ - return 2.0*sqrt(alpha*beta); -} - - -/* Compute the Bednorz shape parameter lambda based on the deformation - parameter tau. */ -static inline double bednorz_get_lambda(double tau) -{ - double abs_tau; - - abs_tau = fabs(tau); - return (abs_tau < BEDNORZ_TAU3 ? - 1.0 : - (abs_tau < BEDNORZ_TAU4 ? - (BEDNORZ_TAU4-abs_tau)/(BEDNORZ_TAU4-BEDNORZ_TAU3) : - 0.0)); -} - - -/* Compute the Bednorz shape parameter eps based on the deformation - parameter tau and the eversion order n. This is an extension to the - original approach that prevents z fighting to some extent in certain - stages of the eversion. */ -static inline double bednorz_get_eps(double tau, int n) -{ - double sgn_tau, abs_tau; - - sgn_tau = (tau < 0.0 ? -1.0 : (tau > 0.0 ? 1.0 : 0.0)); - abs_tau = fabs(tau); - switch (n) - { - case 2: - return (abs_tau < BEDNORZ_TAU1 ? - 0.0 : - (abs_tau < BEDNORZ_TAU2 ? - (BEDNORZ_EPS2*sgn_tau* - (abs_tau-BEDNORZ_TAU1)/(BEDNORZ_TAU2-BEDNORZ_TAU1)) : - (abs_tau < BEDNORZ_TAU3 ? - BEDNORZ_EPS2*sgn_tau : - (abs_tau < BEDNORZ_TAU4 ? - (BEDNORZ_EPS2*sgn_tau* - (BEDNORZ_TAU4-abs_tau)/(BEDNORZ_TAU4-BEDNORZ_TAU3)) : - 0.0)))); - case 3: - return (abs_tau < BEDNORZ_TAU1 ? - BEDNORZ_EPS3*sgn_tau*abs_tau/BEDNORZ_TAU1 : - (abs_tau < BEDNORZ_TAU3 ? - BEDNORZ_EPS3*sgn_tau : - (abs_tau < BEDNORZ_TAU4 ? - (BEDNORZ_EPS3*sgn_tau* - (BEDNORZ_TAU4-abs_tau)/(BEDNORZ_TAU4-BEDNORZ_TAU3)) : - 0.0))); - case 4: - return (abs_tau < BEDNORZ_TAU1 ? - BEDNORZ_EPS4*sgn_tau*abs_tau/BEDNORZ_TAU1 : - (abs_tau < BEDNORZ_TAU3 ? - BEDNORZ_EPS4*sgn_tau : - (abs_tau < BEDNORZ_TAU4 ? - (BEDNORZ_EPS4*sgn_tau* - (BEDNORZ_TAU4-abs_tau)/(BEDNORZ_TAU4-BEDNORZ_TAU3)) : - 0.0))); - case 5: - return (abs_tau < BEDNORZ_TAU1 ? - BEDNORZ_EPS5*sgn_tau*abs_tau/BEDNORZ_TAU1 : - (abs_tau < BEDNORZ_TAU3 ? - BEDNORZ_EPS5*sgn_tau : - (abs_tau < BEDNORZ_TAU4 ? - (BEDNORZ_EPS5*sgn_tau* - (BEDNORZ_TAU4-abs_tau)/(BEDNORZ_TAU4-BEDNORZ_TAU3)) : - 0.0))); - default: - return 0.0; - } -} - - -/* Compute the equations for a point x and its partial derivatives dxdph and - dxdth in the Bednorz sphere eversion based on the sphere parameters phi - (longitude) and theta (latitude) and the shape parameters bsp. This - corresponds to equations (4), (12), and (15) in the paper. */ -static inline void bednorz_get_p0(double phi, double theta, - bednorz_shape_par *bsp, double x[3], - double dxdph[3], double dxdth[3]) -{ - int n; - double kappa, omega, t, p, q, eta, lambda; - double ct, st, cp, sp, cnm1p, snm1p, cnp, snp; - double ctn, ictn, ictnp1, ct2, st2, ct2n, ict2n, ict2np1, ton; - double oml, omlplctn, pe1pk, tat2k, nst2pct2, ost, snpmqt; - double nm1p, ostictn, oictnp1, nst2pct2oictnp1, tcp, tsp; - double lost, tomlplctn, lostcp, lostsp, tomlplctncp, tomlplctnsp; - double tomlplctncpmlostsp, tomlplctnspplostcp, ntctnst, oct2; - double omlpe1pktat2k, nst2; - - n = bsp->n; - kappa = bsp->kappa; - omega = bsp->omega; - t = bsp->t; - p = bsp->p; - q = bsp->q; - eta = bsp->eta; - lambda = bsp->lambda; - - ct = cos(theta); - st = sin(theta); - cp = cos(phi); - sp = sin(phi); - cnp = cos(n*phi); - snp = sin(n*phi); - ctn = ipow(ct,n); - ictn = 1.0/ctn; - ictnp1 = ictn/ct; - ct2 = ct*ct; - st2 = st*st; - ton = t/n; - snpmqt = snp-q*t; - ost = omega*st; - - if (lambda >= 1.0) - { - cnm1p = cos((n-1)*phi); - snm1p = sin((n-1)*phi); - nst2pct2 = n*st2+ct2; - nm1p = (n-1)*p; - tcp = t*cp; - tsp = t*sp; - ostictn = ost*ictn; - oictnp1 = omega*ictnp1; - nst2pct2oictnp1 = nst2pct2*oictnp1; - x[0] = p*snm1p-sp*ostictn+tcp; - x[1] = p*cnm1p+cp*ostictn+tsp; - x[2] = snpmqt*ostictn-ton*cnp; - dxdph[0] = nm1p*cnm1p-cp*ostictn-tsp; - dxdph[1] = -nm1p*snm1p-sp*ostictn+tcp; - dxdph[2] = n*cnp*ostictn+t*snp; - dxdth[0] = -sp*nst2pct2oictnp1; - dxdth[1] = cp*nst2pct2oictnp1; - dxdth[2] = snpmqt*nst2pct2oictnp1; - /* The same formulas written out in full glory: - x[0] = (t*cos(phi)+ - p*sin((n-1)*phi)- - (omega*sin(theta)/ipow(cos(theta),n))*sin(phi)); - x[1] = (t*sin(phi)+ - p*cos((n-1)*phi)+ - (omega*sin(theta)/ipow(cos(theta),n))*cos(phi)); - x[2] = ((omega*sin(theta)/ipow(cos(theta),n))*sin(n*phi)- - (t/n)*cos(n*phi)- - omega*q*t*sin(theta)/ipow(cos(theta),n)); - dxdph[0] = (-t*sin(phi)+ - (n-1)*p*cos((n-1)*phi)- - (omega*sin(theta)/ipow(cos(theta),n))*cos(phi)); - dxdph[1] = (t*cos(phi)- - (n-1)*p*sin((n-1)*phi)- - (omega*sin(theta)/ipow(cos(theta),n))*sin(phi)); - dxdph[2] = ((n*omega*sin(theta)/ipow(cos(theta),n))*cos(n*phi)+ - t*sin(n*phi)); - dxdth[0] = -((omega*sin(phi)*(n*ipow(sin(theta),2)+ipow(cos(theta),2)))/ - ipow(cos(theta),n+1)); - dxdth[1] = ((omega*cos(phi)*(n*ipow(sin(theta),2)+ipow(cos(theta),2)))/ - ipow(cos(theta),n+1)); - dxdth[2] = ((omega*sin(n*phi)*(n*ipow(sin(theta),2)+ipow(cos(theta),2))/ - ipow(cos(theta),n+1))- - (omega*q*t*(n*ipow(sin(theta),2)+ipow(cos(theta),2))/ - ipow(cos(theta),n+1))); - */ - } - else - { - ct2n = ipow(ct,2*n); - ict2n = 1.0/ct2n; - ict2np1 = ict2n/ct; - oml = 1.0-lambda; - omlplctn = oml+lambda*ctn; - pe1pk = pow(eta,1.0+kappa); - tat2k = t*pow(fabs(t),2.0*kappa); - lost = lambda*ost; - lostcp = lost*cp; - lostsp = lost*sp; - tomlplctn = t*omlplctn; - tomlplctncp = tomlplctn*cp; - tomlplctnsp = tomlplctn*sp; - tomlplctncpmlostsp = tomlplctncp-lostsp; - tomlplctnspplostcp = tomlplctnsp+lostcp; - ntctnst = n*t*ctn*st; - oct2 = omega*ct2; - omlpe1pktat2k = oml*pe1pk*tat2k; - nst2 = n*st2; - x[0] = tomlplctncpmlostsp*ictn; - x[1] = tomlplctnspplostcp*ictn; - x[2] = lambda*(ost*snpmqt*ictn-ton*cnp)-omlpe1pktat2k*st*ict2n; - dxdph[0] = -tomlplctnspplostcp*ictn; - dxdph[1] = tomlplctncpmlostsp*ictn; - dxdph[2] = lambda*(omega*n*st*cnp*ictn+t*snp); - dxdth[0] = (n*tomlplctncpmlostsp*st-lambda*(ntctnst*cp+oct2*sp))*ictnp1; - dxdth[1] = (n*tomlplctnspplostcp*st-lambda*(ntctnst*sp-oct2*cp))*ictnp1; - dxdth[2] = (lambda*omega*snpmqt*(nst2+ct2)*ictnp1- - omlpe1pktat2k*(2.0*nst2+ct2)*ict2np1); - /* The same formulas written out in full glory: - x[0] = ((t*(1.0-lambda+lambda*ipow(cos(theta),n))*cos(phi)- - lambda*omega*sin(theta)*sin(phi))/ - ipow(cos(theta),n)); - x[1] = ((t*(1.0-lambda+lambda*ipow(cos(theta),n))*sin(phi)+ - lambda*omega*sin(theta)*cos(phi))/ - ipow(cos(theta),n)); - x[2] = (lambda*(omega*sin(theta)*(sin(n*phi)-q*t)/ipow(cos(theta),n)- - (t/n)*cos(n*phi))- - (1.0-lambda)*pow(eta,1.0+kappa)* - t*pow(fabs(t),2.0*kappa)*sin(theta)/ipow(cos(theta),2*n)); - dxdph[0] = ((-t*(1.0-lambda+lambda*ipow(cos(theta),n))*sin(phi)- - lambda*omega*sin(theta)*cos(phi))/ - ipow(cos(theta),n)); - dxdph[1] = ((t*(1.0-lambda+lambda*ipow(cos(theta),n))*cos(phi)- - lambda*omega*sin(theta)*sin(phi))/ - ipow(cos(theta),n)); - dxdph[2] = (lambda*(omega*n*sin(theta)*(cos(n*phi))/ipow(cos(theta),n)+ - t*sin(n*phi))); - dxdth[0] = ((n*(t*(1.0-lambda+lambda*ipow(cos(theta),n))*cos(phi)- - lambda*omega*sin(theta)*sin(phi))*sin(theta)/ - ipow(cos(theta),n+1))- - (lambda*(n*t*ipow(cos(theta),n)*sin(theta)*cos(phi)+ - omega*ipow(cos(theta),2)*sin(phi))/ - ipow(cos(theta),n+1))); - dxdth[1] = ((n*(t*(1.0-lambda+lambda*ipow(cos(theta),n))*sin(phi)+ - lambda*omega*sin(theta)*cos(phi))*sin(theta)/ - ipow(cos(theta),n+1))- - (lambda*(n*t*ipow(cos(theta),n)*sin(theta)*sin(phi)- - omega*ipow(cos(theta),2)*cos(phi))/ - ipow(cos(theta),n+1))); - dxdth[2] = ((lambda*omega*(sin(n*phi)-q*t)* - (n*ipow(sin(theta),2)+ipow(cos(theta),2))/ - ipow(cos(theta),n+1))- - ((1.0-lambda)*pow(eta,1.0+kappa)*t*pow(fabs(t),2.0*kappa)* - (2.0*n*ipow(sin(theta),2)+ipow(cos(theta),2))/ - ipow(cos(theta),2*n+1))); - */ - } -} - - -/* Compute the equations for a point y and its partial derivatives dydph and - dydth in the Bednorz sphere eversion based on the sphere parameters phi - (longitude) and theta (latitude) and the shape parameters bsp. This - corresponds to equation (7) in the paper. */ -static inline void bednorz_get_p1(double phi, double theta, - bednorz_shape_par *bsp, double y[3], - double dydph[3], double dydth[3]) -{ - double kappa, xi, eta; - double x[3], dxdph[3], dxdth[3]; - double x0, x1, x2, x02, x12, x02px12, ex02px12, xipex02px12; - double ixipex02px122, ixipex02px12k, ixipex02px12kp1; - double x0dx0dphpx1dx1dph, x0dx0dthpx1dx1dth; - double tex0dx0dphpx1dx1dph, tex0dx0dthpx1dx1dth; - double ktex0dx0dphpx1dx1dph, ktex0dx0dthpx1dx1dth; - - kappa = bsp->kappa; - xi = bsp->xi; - eta = bsp->eta; - - bednorz_get_p0(phi,theta,bsp,x,dxdph,dxdth); - - x0 = x[0]; - x1 = x[1]; - x2 = x[2]; - x02 = x0*x0; - x12 = x1*x1; - x02px12 = x02+x12; - ex02px12 = eta*x02px12; - xipex02px12 = xi+ex02px12; - ixipex02px122 = 1.0/(xipex02px12*xipex02px12); - ixipex02px12k = 1.0/pow(xipex02px12,kappa); - ixipex02px12kp1 = ixipex02px12k/xipex02px12; - x0dx0dphpx1dx1dph = x0*dxdph[0]+x1*dxdph[1]; - x0dx0dthpx1dx1dth = x0*dxdth[0]+x1*dxdth[1]; - tex0dx0dphpx1dx1dph = 2.0*eta*x0dx0dphpx1dx1dph; - tex0dx0dthpx1dx1dth = 2.0*eta*x0dx0dthpx1dx1dth; - ktex0dx0dphpx1dx1dph = kappa*tex0dx0dphpx1dx1dph; - ktex0dx0dthpx1dx1dth = kappa*tex0dx0dthpx1dx1dth; - - y[0] = x0*ixipex02px12k; - y[1] = x1*ixipex02px12k; - y[2] = x2/xipex02px12; - dydph[0] = (dxdph[0]*xipex02px12-ktex0dx0dphpx1dx1dph*x0)*ixipex02px12kp1; - dydph[1] = (dxdph[1]*xipex02px12-ktex0dx0dphpx1dx1dph*x1)*ixipex02px12kp1; - dydph[2] = (dxdph[2]*xipex02px12-tex0dx0dphpx1dx1dph*x2)*ixipex02px122; - dydth[0] = (dxdth[0]*xipex02px12-ktex0dx0dthpx1dx1dth*x0)*ixipex02px12kp1; - dydth[1] = (dxdth[1]*xipex02px12-ktex0dx0dthpx1dx1dth*x1)*ixipex02px12kp1; - dydth[2] = (dxdth[2]*xipex02px12-tex0dx0dthpx1dx1dth*x2)*ixipex02px122; - - /* The same formulas written out in full glory: - y[0] = x[0]/pow(xi+eta*(ipow(x[0],2)+ipow(x[1],2)),kappa); - y[1] = x[1]/pow(xi+eta*(ipow(x[0],2)+ipow(x[1],2)),kappa); - y[2] = x[2]/(xi+eta*(ipow(x[0],2)+ipow(x[1],2))); - dydph[0] = ((dxdph[0]*(xi+eta*(ipow(x[0],2)+ipow(x[1],2)))- - 2.0*eta*kappa*x[0]*(x[0]*dxdph[0]+x[1]*dxdph[1]))/ - pow(xi+eta*(ipow(x[0],2)+ipow(x[1],2)),kappa+1.0)); - dydph[1] = ((dxdph[1]*(xi+eta*(ipow(x[0],2)+ipow(x[1],2)))- - 2.0*eta*kappa*x[1]*(x[0]*dxdph[0]+x[1]*dxdph[1]))/ - pow(xi+eta*(ipow(x[0],2)+ipow(x[1],2)),kappa+1.0)); - dydph[2] = ((dxdph[2]*(xi+eta*(ipow(x[0],2)+ipow(x[1],2)))- - 2.0*eta*x[2]*(x[0]*dxdph[0]+x[1]*dxdph[1]))/ - ipow(xi+eta*(ipow(x[0],2)+ipow(x[1],2)),2)); - dydth[0] = ((dxdth[0]*(xi+eta*(ipow(x[0],2)+ipow(x[1],2)))- - 2.0*eta*kappa*x[0]*(x[0]*dxdth[0]+x[1]*dxdth[1]))/ - pow(xi+eta*(ipow(x[0],2)+ipow(x[1],2)),kappa+1.0)); - dydth[1] = ((dxdth[1]*(xi+eta*(ipow(x[0],2)+ipow(x[1],2)))- - 2.0*eta*kappa*x[1]*(x[0]*dxdth[0]+x[1]*dxdth[1]))/ - pow(xi+eta*(ipow(x[0],2)+ipow(x[1],2)),kappa+1.0)); - dydth[2] = ((dxdth[2]*(xi+eta*(ipow(x[0],2)+ipow(x[1],2)))- - 2.0*eta*x[2]*(x[0]*dxdth[0]+x[1]*dxdth[1]))/ - ipow(xi+eta*(ipow(x[0],2)+ipow(x[1],2)),2)); - */ -} - - -/* Compute the equations for a point z and its partial derivatives dzdph and - dzdth in the Bednorz sphere eversion based on the sphere parameters phi - (longitude) and theta (latitude) and the shape parameters bsp. This - corresponds to equations (8) and (9) in the paper. */ -static void inline bednorz_get_p2(double phi, double theta, - bednorz_shape_par *bsp, double z[3], - double dzdph[3], double dzdth[3]) -{ - double alpha, beta, gamma; - double y[3], dydph[3], dydth[3]; - double y0, y1, y2, y02, y12, y02py12, egy2, apby02py12, amby02py12; - double iapby02py12, iapby02py122, igapby02py12, igapby02py122; - double ambogapb, egy2apby02py12, egy2amby02py12, tbegy2; - double y0dy0dphpy1dy1dph, y0dy0dthpy1dy1dth; - double iy02py12, iy02py122, ty0dy0dphpy1dy1dph, ty0dy0dthpy1dy1dth; - double tbegy2y0dy0dphpy1dy1dph, tbegy2y0dy0dthpy1dy1dth; - double gigapby02py122, gegy2amby02py12; - - alpha = bsp->alpha; - beta = bsp->beta; - gamma = bsp->gamma; - - bednorz_get_p1(phi,theta,bsp,y,dydph,dydth); - - y0 = y[0]; - y1 = y[1]; - y2 = y[2]; - y02 = y0*y0; - y12 = y1*y1; - y02py12 = y02+y12; - y0dy0dphpy1dy1dph = y0*dydph[0]+y1*dydph[1]; - y0dy0dthpy1dy1dth = y0*dydth[0]+y1*dydth[1]; - - if (alpha > 0.0) - { - /* For the north and south poles, the equations in bednorz_get_p0 - and bednorz_get_p1 become singular. Therefore, we include a special - treatment here. Furthermore, we compute the surface normal vector - based on the cross product of the partial derivative vectors in - bednorz_point_normal. For the north and south poles, the partial - derivative vectors are linearly dependent and thus don't yield a - useful normal vector. Therefore, we have to include a special - treatment for the two poles. */ - if (fabs(theta-M_PI/2.0) <= 1.0e-4) - { - z[0] = 0.0; - z[1] = 0.0; - z[2] = -sqrt(alpha/beta)/(alpha+beta); - dzdph[0] = 1.0; - dzdph[1] = 0.0; - dzdph[2] = 0.0; - dzdth[0] = 0.0; - dzdth[1] = 1.0; - dzdth[2] = 0.0; - } - else if (fabs(theta+M_PI/2.0) <= 1.0e-4) - { - z[0] = 0.0; - z[1] = 0.0; - z[2] = -sqrt(alpha/beta)/(alpha+beta); - dzdph[0] = 1.0; - dzdph[1] = 0.0; - dzdph[2] = 0.0; - dzdth[0] = 0.0; - dzdth[1] = -1.0; - dzdth[2] = 0.0; - } - else - { - egy2 = exp(gamma*y2); - apby02py12 = alpha+beta*y02py12; - amby02py12 = alpha-beta*y02py12; - iapby02py12 = 1.0/apby02py12; - iapby02py122 = iapby02py12*iapby02py12; - igapby02py12 = iapby02py12/gamma; - igapby02py122 = igapby02py12*igapby02py12; - ambogapb = (alpha-beta)/(gamma*(alpha+beta)); - egy2apby02py12 = egy2*apby02py12; - egy2amby02py12 = egy2*amby02py12; - tbegy2 = 2.0*beta*egy2; - tbegy2y0dy0dphpy1dy1dph = tbegy2*y0dy0dphpy1dy1dph; - tbegy2y0dy0dthpy1dy1dth = tbegy2*y0dy0dthpy1dy1dth; - gigapby02py122 = gamma*igapby02py122; - gegy2amby02py12 = gamma*egy2amby02py12; - - z[0] = y0*egy2*iapby02py12; - z[1] = y1*egy2*iapby02py12; - z[2] = egy2amby02py12*igapby02py12-ambogapb; - dzdph[0] = ((y0*gamma*dydph[2]+dydph[0])*egy2apby02py12- - y0*tbegy2y0dy0dphpy1dy1dph)*iapby02py122; - dzdph[1] = ((y1*gamma*dydph[2]+dydph[1])*egy2apby02py12- - y1*tbegy2y0dy0dphpy1dy1dph)*iapby02py122; - dzdph[2] = (((gegy2amby02py12*dydph[2]-tbegy2y0dy0dphpy1dy1dph)* - apby02py12-tbegy2y0dy0dphpy1dy1dph*amby02py12)* - gigapby02py122); - dzdth[0] = ((y0*gamma*dydth[2]+dydth[0])*egy2apby02py12- - y0*tbegy2y0dy0dthpy1dy1dth)*iapby02py122; - dzdth[1] = ((y1*gamma*dydth[2]+dydth[1])*egy2apby02py12- - y1*tbegy2y0dy0dthpy1dy1dth)*iapby02py122; - dzdth[2] = (((gegy2amby02py12*dydth[2]-tbegy2y0dy0dthpy1dy1dth)* - apby02py12-tbegy2y0dy0dthpy1dy1dth*amby02py12)* - gigapby02py122); - } - - /* The same formulas written out in full glory: - z[0] = (y[0]*exp(gamma*y[2]))/(alpha+beta*(ipow(y[0],2)+ipow(y[1],2))); - z[1] = (y[1]*exp(gamma*y[2]))/(alpha+beta*(ipow(y[0],2)+ipow(y[1],2))); - z[2] = ((exp(gamma*y[2])*(alpha-beta*(ipow(y[0],2)+ipow(y[1],2))))/ - (gamma*(alpha+beta*(ipow(y[0],2)+ipow(y[1],2))))- - ((alpha-beta)/(gamma*(alpha+beta)))); - dzdph[0] = (((exp(gamma*y[2])*(gamma*y[0]*dydph[2]+dydph[0])* - (alpha+beta*(ipow(y[0],2)+ipow(y[1],2))))- - (2.0*beta*exp(gamma*y[2])*y[0]* - (y[0]*dydph[0]+y[1]*dydph[1])))/ - ipow(alpha+beta*(ipow(y[0],2)+ipow(y[1],2)),2)); - dzdph[1] = (((exp(gamma*y[2])*(gamma*y[1]*dydph[2]+dydph[1])* - (alpha+beta*(ipow(y[0],2)+ipow(y[1],2))))- - (2.0*beta*exp(gamma*y[2])*y[1]* - (y[0]*dydph[0]+y[1]*dydph[1])))/ - ipow(alpha+beta*(ipow(y[0],2)+ipow(y[1],2)),2)); - dzdph[2] = (((gamma*exp(gamma*y[2])* - (alpha-beta*(ipow(y[0],2)+ipow(y[1],2)))*dydph[2]- - 2.0*beta*exp(gamma*y[2])*(y[0]*dydph[0]+y[1]*dydph[1]))* - (gamma*(alpha+beta*(ipow(y[0],2)+ipow(y[1],2))))- - (2.0*gamma*beta*exp(gamma*y[2])* - (alpha-beta*(ipow(y[0],2)+ipow(y[1],2)))* - (y[0]*dydph[0]+y[1]*dydph[1])))/ - ipow(gamma*(alpha+beta*(ipow(y[0],2)+ipow(y[1],2))),2)); - dzdth[0] = (((exp(gamma*y[2])*(gamma*y[0]*dydth[2]+dydth[0])* - (alpha+beta*(ipow(y[0],2)+ipow(y[1],2))))- - (2.0*beta*exp(gamma*y[2])*y[0]* - (y[0]*dydth[0]+y[1]*dydth[1])))/ - ipow(alpha+beta*(ipow(y[0],2)+ipow(y[1],2)),2)); - dzdth[1] = (((exp(gamma*y[2])*(gamma*y[1]*dydth[2]+dydth[1])* - (alpha+beta*(ipow(y[0],2)+ipow(y[1],2))))- - (2.0*beta*exp(gamma*y[2])*y[1]* - (y[0]*dydth[0]+y[1]*dydth[1])))/ - ipow(alpha+beta*(ipow(y[0],2)+ipow(y[1],2)),2)); - dzdth[2] = (((gamma*exp(gamma*y[2])* - (alpha-beta*(ipow(y[0],2)+ipow(y[1],2)))*dydth[2]- - 2.0*beta*exp(gamma*y[2])*(y[0]*dydth[0]+y[1]*dydth[1]))* - (gamma*(alpha+beta*(ipow(y[0],2)+ipow(y[1],2))))- - (2.0*gamma*beta*exp(gamma*y[2])* - (alpha-beta*(ipow(y[0],2)+ipow(y[1],2)))* - (y[0]*dydth[0]+y[1]*dydth[1])))/ - ipow(gamma*(alpha+beta*(ipow(y[0],2)+ipow(y[1],2))),2)); - */ - } - else - { - iy02py12 = 1.0/y02py12; - iy02py122 = iy02py12*iy02py12; - ty0dy0dphpy1dy1dph = 2.0*y0dy0dphpy1dy1dph; - ty0dy0dthpy1dy1dth = 2.0*y0dy0dthpy1dy1dth; - - z[0] = y0*iy02py12; - z[1] = y1*iy02py12; - z[2] = -y2; - - /* We compute the surface normal vector based on the cross product - of the partial derivative vectors in bednorz_point_normal. For the - north and south poles, the partial derivative vectors are linearly - dependent and thus don't yield a useful normal vector. Therefore, - we have to include a special treatment for the two poles. */ - if (fabs(theta-M_PI/2.0) <= 1.0e-4) - { - dzdph[0] = 1.0; - dzdph[1] = 0.0; - dzdph[2] = 0.0; - dzdth[0] = 0.0; - dzdth[1] = 1.0; - dzdth[2] = 0.0; - } - else if (fabs(theta+M_PI/2.0) <= 1.0e-4) - { - dzdph[0] = 1.0; - dzdph[1] = 0.0; - dzdph[2] = 0.0; - dzdth[0] = 0.0; - dzdth[1] = -1.0; - dzdth[2] = 0.0; - } - else - { - dzdph[0] = (dydph[0]*y02py12-y0*ty0dy0dphpy1dy1dph)*iy02py122; - dzdph[1] = (dydph[1]*y02py12-y1*ty0dy0dphpy1dy1dph)*iy02py122; - dzdph[2] = -dydph[2]; - dzdth[0] = (dydth[0]*y02py12-y0*ty0dy0dthpy1dy1dth)*iy02py122; - dzdth[1] = (dydth[1]*y02py12-y1*ty0dy0dthpy1dy1dth)*iy02py122; - dzdth[2] = -dydth[2]; - } - - /* The same formulas written out in full glory: - z[0] = y[0]/(ipow(y[0],2)+ipow(y[1],2)); - z[1] = y[1]/(ipow(y[0],2)+ipow(y[1],2)); - z[2] = -y[2]; - dzdph[0] = ((dydph[0]*(ipow(y[0],2)+ipow(y[1],2))- - 2.0*y[0]*(y[0]*dydph[0]+y[1]*dydph[1]))/ - ipow(ipow(y[0],2)+ipow(y[1],2),2)); - dzdph[1] = ((dydph[1]*(ipow(y[0],2)+ipow(y[1],2))- - 2.0*y[1]*(y[0]*dydph[0]+y[1]*dydph[1]))/ - ipow(ipow(y[0],2)+ipow(y[1],2),2)); - dzdph[2] = -dydph[2]; - dzdth[0] = ((dydth[0]*(ipow(y[0],2)+ipow(y[1],2))- - 2.0*y[0]*(y[0]*dydth[0]+y[1]*dydth[1]))/ - ipow(ipow(y[0],2)+ipow(y[1],2),2)); - dzdth[1] = ((dydth[1]*(ipow(y[0],2)+ipow(y[1],2))- - 2.0*y[1]*(y[0]*dydth[0]+y[1]*dydth[1]))/ - ipow(ipow(y[0],2)+ipow(y[1],2),2)); - dzdth[2] = -dydth[2]; - */ - } -} - - -/* Compute a point p and its surface normal n in the Bednorz sphere - eversion based on the sphere parameters phi (longitude) and theta - (latitude) and the shape parameters bsp. */ -static void inline bednorz_point_normal(double phi, double theta, - bednorz_shape_par *bsp, - float p[3], float n[3]) -{ - double z[3], dzdph[3], dzdth[3]; - float a[3], b[3], t; - float lambda, eps, oz; - int i; - - bednorz_get_p2(phi,theta,bsp,z,dzdph,dzdth); - - for (i=0; i<3; i++) - { - p[i] = z[i]; - a[i] = dzdph[i]; - b[i] = dzdth[i]; - } - - /* In the original version of the Bednorz sphere eversion, the regions - around the north and south poles of the sphere are deformed to points - that lie very close to each other. This leads to a significant amount - of z fighting, especially for higher eversion orders, which is visually - unpleasant. Therefore, we modify the shape of the deformed sphere very - slightly to avoid or at least ameliorate the z fighting. */ - lambda = bsp->lambda; - eps = bsp->eps; - if (lambda == 1.0) - oz = eps*sin(theta); - else - oz = 0.0f; - p[2] += oz; - - cross(a,b,n); - t = 1.0f/sqrtf(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]); - n[0] *= t; - n[1] *= t; - n[2] *= t; -} - - -/* Set up the surface colors for the main pass (i.e., index 0). */ -static void setup_surface_colors(ModeInfo *mi, float phi_min, float phi_max, - float theta_min, float theta_max, - int num_phi, int num_theta) -{ - int i, j, o; - float matc[3][3]; - float phi, theta, phi_range, theta_range; - sphereeversionstruct *se = &sphereeversion[MI_SCREEN(mi)]; - - if (se->colors[0] != COLORS_TWOSIDED) - { - /* Compute the rotation that rotates the color basis vectors. */ - for (i=0; i<3; i++) - for (j=0; j<3; j++) - matc[i][j] = (i==j); - rotatez(matc,-26.565051177078015); - rotatey(matc,-335.90515744788928); - rotatex(matc,-50.768479516407787); - - phi_range = phi_max-phi_min; - theta_range = theta_max-theta_min; - for (j=0; j<=num_phi; j++) - { - phi = phi_range*j/num_phi+phi_min; - for (i=0; i<=num_theta; i++) - { - o = j*(num_theta+1)+i; - theta = theta_range*i/num_theta+theta_min; - if (se->colors[0] == COLORS_PARALLEL) - color(se,(2.0f*theta+M_PI)*(2.0f/3.0f),matc,&se->colf[0][4*o], - &se->colb[0][4*o]); - else /* se->colors[0] == COLORS_MERIDIAN */ - color(se,phi+M_PI,matc,&se->colf[0][4*o],&se->colb[0][4*o]); - } - } - } -#ifdef VERTEXATTRIBARRAY_WORKAROUND - else /* se->colors[0] == COLORS_TWOSIDED */ - { - /* For some strange reason, the color buffer must be initialized - and used on macOS. Otherwise two-sided lighting will not - work. */ - int k; - for (j=0; j<=num_phi; j++) - { - for (i=0; i<=num_theta; i++) - { - o = j*(num_theta+1)+i; - for (k=0; k<4; k++) - { - se->colf[0][4*o+k] = 1.0f; - se->colb[0][4*o+k] = 1.0f; - } - } - } - } -#endif /* VERTEXATTRIBARRAY_WORKAROUND */ - #ifdef HAVE_GLSL - if (se->use_shaders) - { - glBindBuffer(GL_ARRAY_BUFFER,se->vertex_colorf_buffer[0]); - glBufferData(GL_ARRAY_BUFFER, - 4*(num_phi+1)*(num_theta+1)*sizeof(GLfloat), - se->colf[0],GL_STATIC_DRAW); - glBindBuffer(GL_ARRAY_BUFFER,0); - - glBindBuffer(GL_ARRAY_BUFFER,se->vertex_colorb_buffer[0]); - glBufferData(GL_ARRAY_BUFFER, - 4*(num_phi+1)*(num_theta+1)*sizeof(GLfloat), - se->colb[0],GL_STATIC_DRAW); - glBindBuffer(GL_ARRAY_BUFFER,0); - } -#endif /* HAVE_GLSL */ -} - -/* Draw the Bednorz sphere eversion using OpenGL's fixed - functionality. */ -static int bednorz_sphere_eversion_ff(ModeInfo *mi, float phi_min, - float phi_max, float theta_min, - float theta_max, int num_phi, - int num_theta, int numb_dist, - int numb_dir, int num_grid) +/* Set up and enable texturing on our object */ +void setup_xpm_texture(ModeInfo *mi, const unsigned char *data, + unsigned long size) { - static const GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 1.0 }; - static const GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; - static const GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 }; - static const GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; - static const GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; - static const GLfloat mat_diff_front[] = { 1.0, 0.0, 0.0, 1.0 }; - static const GLfloat mat_diff_back[] = { 0.0, 1.0, 0.0, 1.0 }; - static const GLfloat mat_diff_trans_front[] = { 1.0, 0.0, 0.0, 0.7 }; - static const GLfloat mat_diff_trans_back[] = { 0.0, 1.0, 0.0, 0.7 }; - float p[3], n[3], mat[3][3]; - int i, j, k, l, m, o; - int numb_dist_mask, numb_dist_min, numb_dist_max; - int numb_dir_mask, numb_dir_min, numb_dir_max; - float phi, theta, phi_range, theta_range; - float *xx, *xn, *cf, *cb; - float a, b, c, d, e, tau, tau_min, tau_max, r, s; - float x, y, z, zmin, zmax, rmax, scale, offset_z; - bednorz_shape_par bsp; - float qu[4], r1[3][3], r2[3][3]; sphereeversionstruct *se = &sphereeversion[MI_SCREEN(mi)]; - int polys; - - tau = se->tau; - /* Apply easing functions to the different ranges of tau. */ - if (fabsf(tau) <= BEDNORZ_TAU4) - { - if (fabsf(tau) <= BEDNORZ_TAU1) - { - tau_min = 0.0f; - tau_max = BEDNORZ_TAU1; - } - else - if (fabsf(tau) <= BEDNORZ_TAU2) - { - tau_min = BEDNORZ_TAU1; - tau_max = BEDNORZ_TAU2; - } - else if (fabsf(tau) <= BEDNORZ_TAU3) - { - tau_min = BEDNORZ_TAU2; - tau_max = BEDNORZ_TAU3; - } - else /* fabsf(tau) <= BEDNORZ_TAU4 */ - { - tau_min = BEDNORZ_TAU3; - tau_max = BEDNORZ_TAU4; - } - e = 1.0f/(tau_min*tau_min-2.0f*tau_min*tau_max+tau_max*tau_max); - a = -2.0f*e; - b = 3.0f*(tau_min+tau_max)*e; - c = -6.0f*tau_min*tau_max*e; - d = tau_min*tau_max*(tau_min+tau_max)*e; - if (tau >= 0.0f) - tau = ((a*tau+b)*tau+c)*tau+d; - else - tau = ((a*tau-b)*tau+c)*tau-d; - } - /* Set up the shape parameters. */ - bsp.n = se->g; - bsp.kappa = bednorz_get_kappa(bsp.n); - bsp.omega = BEDNORZ_OMEGA; - bsp.t = bednorz_get_t(tau); - bsp.p = bednorz_get_p(tau); - bsp.q = bednorz_get_q(tau); - bsp.xi = bednorz_get_xi(tau); - bsp.eta = bednorz_get_eta(tau,se->eta_min); - bsp.alpha = bednorz_get_alpha(tau); - bsp.beta = bednorz_get_beta(tau,se->beta_max); - bsp.gamma = bednorz_get_gamma(bsp.alpha,bsp.beta); - bsp.lambda = bednorz_get_lambda(tau); - bsp.eps = bednorz_get_eps(tau,bsp.n); - - /* Compute the surface points and normals. */ - phi_range = phi_max-phi_min; - theta_range = theta_max-theta_min; - for (j=0; j<=num_phi; j++) - { - phi = phi_range*j/num_phi+phi_min; - for (i=0; i<=num_theta; i++) - { - o = j*(num_theta+1)+i; - theta = theta_range*i/num_theta+theta_min; - bednorz_point_normal(phi,theta,&bsp,&se->se[3*o],&se->sen[3*o]); - } - } - - /* Compute the z offset. */ - zmin = FLT_MAX; - zmax = -FLT_MAX; - for (j=0; j<=num_phi; j++) - { - for (i=0; i<=num_theta; i++) - { - o = j*(num_theta+1)+i; - z = se->se[3*o+2]; - if (z < zmin) - zmin = z; - if (z > zmax) - zmax = z; - } - } - offset_z = -0.5f*(zmin+zmax); - - /* Shift the surface in the z direction and compute the scale. */ - rmax = -FLT_MAX; - for (j=0; j<=num_phi; j++) - { - for (i=0; i<=num_theta; i++) - { - o = j*(num_theta+1)+i; - se->se[3*o+2] += offset_z; - x = se->se[3*o]; - y = se->se[3*o+1]; - z = se->se[3*o+2]; - r = x*x+y*y+z*z; - if (r > rmax) - rmax = r; - } - } - scale = 0.75f/sqrtf(rmax); - - /* Scale the surface. */ - for (j=0; j<=num_phi; j++) - { - for (i=0; i<=num_theta; i++) - { - o = j*(num_theta+1)+i; - se->se[3*o] *= scale; - se->se[3*o+1] *= scale; - se->se[3*o+2] *= scale; - } - } - - /* Compute the rotation that rotates the surface in 3D, including the - trackball rotations. */ - rotateall(se->alpha,se->beta,se->delta,r1); - - gltrackball_get_quaternion(se->trackball,qu); - quat_to_rotmat(qu,r2); - - mult_rotmat(r2,r1,mat); - - numb_dist_mask = numb_dist-1; - numb_dist_min = numb_dist/4; - numb_dist_max = 3*numb_dist/4; - numb_dir_mask = numb_dir-1; - numb_dir_min = numb_dir/4; - numb_dir_max = 3*numb_dir/4; - - glClearColor(0.0f,0.0f,0.0f,1.0f); - glClearDepth(1.0f); - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - if (se->projection == DISP_PERSPECTIVE) - { - gluPerspective(60.0,se->aspect,0.1,10.0); - } + XImage *image; + + image = image_data_to_ximage(MI_DISPLAY(mi),MI_VISUAL(mi),data,size); + glEnable(GL_TEXTURE_2D); + glPixelStorei(GL_UNPACK_ALIGNMENT,1); + glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,image->width,image->height,0,GL_RGBA, + GL_UNSIGNED_BYTE,image->data); + if (se->use_mipmaps) + glGenerateMipmap(GL_TEXTURE_2D); + /* Limit the maximum mipmap level to 4 to avoid texture interpolation + artifacts at the poles. */ + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAX_LEVEL,4); + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); + if (se->use_mipmaps) + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, + GL_LINEAR_MIPMAP_LINEAR); else - { - if (se->aspect >= 1.0) - glOrtho(-se->aspect,se->aspect,-1.0,1.0,0.1,10.0); - else - glOrtho(-1.0,1.0,-1.0/se->aspect,1.0/se->aspect,0.1,10.0); - } - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - if (se->display_mode[0] == DISP_SURFACE) - { - glDisable(GL_CULL_FACE); - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LESS); - glShadeModel(GL_SMOOTH); - glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); - glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_TRUE); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient); - glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse); - glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular); - glLightfv(GL_LIGHT0,GL_POSITION,light_position); - glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,mat_specular); - glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,50.0); - glDepthMask(GL_TRUE); - glDisable(GL_BLEND); - } - else /* se->display_mode[0] == DISP_TRANSPARENT */ - { - glDisable(GL_CULL_FACE); - glDisable(GL_DEPTH_TEST); - glShadeModel(GL_SMOOTH); - glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); - glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_TRUE); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient); - glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse); - glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular); - glLightfv(GL_LIGHT0,GL_POSITION,light_position); - glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,mat_specular); - glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,50.0); - glDepthMask(GL_FALSE); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA,GL_ONE); - } - - if (se->colors[0] == COLORS_TWOSIDED) - { - glColor3fv(mat_diff_front); - if (se->display_mode[0] == DISP_TRANSPARENT) - { - glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,mat_diff_trans_front); - glMaterialfv(GL_BACK,GL_AMBIENT_AND_DIFFUSE,mat_diff_trans_back); - } - else - { - glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,mat_diff_front); - glMaterialfv(GL_BACK,GL_AMBIENT_AND_DIFFUSE,mat_diff_back); - } - } - glEnable(GL_POLYGON_OFFSET_FILL); - glPolygonOffset(1.0f,1.0f); - - if (se->appearance[0] == APPEARANCE_PARALLEL_BANDS) - { - for (i=0; i= numb_dist_min) && - ((i & numb_dist_mask) < numb_dist_max)) - continue; - glBegin(GL_TRIANGLE_STRIP); - for (j=num_phi; j>=0; j--) - { - for (k=0; k<=1; k++) - { - l = i+k; - m = j; - o = m*(num_theta+1)+l; - phi = phi_range*m/num_phi+phi_min; - theta = theta_range*l/num_theta+theta_min; - xx = &se->se[3*o]; - xn = &se->sen[3*o]; - for (l=0; l<3; l++) - { - r = 0.0f; - s = 0.0f; - for (m=0; m<3; m++) - { - r += mat[l][m]*xx[m]; - s += mat[l][m]*xn[m]; - } - p[l] = r+se->offset3d[l]; - n[l] = s; - } - if (se->colors[0] != COLORS_TWOSIDED) - { - cf = &se->colf[0][4*o]; - cb = &se->colb[0][4*o]; - glColor3fv(cf); - glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,cf); - glMaterialfv(GL_BACK,GL_AMBIENT_AND_DIFFUSE,cb); - } - glNormal3fv(n); - glVertex3fv(p); - } - } - glEnd(); - } - polys = num_theta*(num_phi+1); - } - else /* se->appearance[0] != APPEARANCE_PARALLEL_BANDS */ - { - for (j=0; jappearance[0] == APPEARANCE_MERIDIAN_BANDS && - ((j & numb_dir_mask) >= numb_dir_min) && - ((j & numb_dir_mask) < numb_dir_max)) - continue; - glBegin(GL_TRIANGLE_STRIP); - for (i=0; i<=num_theta; i++) - { - for (k=0; k<=1; k++) - { - l = i; - m = j+k; - o = m*(num_theta+1)+l; - phi = phi_range*m/num_phi+phi_min; - theta = theta_range*l/num_theta+theta_min; - xx = &se->se[3*o]; - xn = &se->sen[3*o]; - for (l=0; l<3; l++) - { - r = 0.0f; - s = 0.0f; - for (m=0; m<3; m++) - { - r += mat[l][m]*xx[m]; - s += mat[l][m]*xn[m]; - } - p[l] = r+se->offset3d[l]; - n[l] = s; - } - if (se->colors[0] != COLORS_TWOSIDED) - { - cf = &se->colf[0][4*o]; - cb = &se->colb[0][4*o]; - glColor3fv(cf); - glMaterialfv(GL_FRONT,GL_AMBIENT_AND_DIFFUSE,cf); - glMaterialfv(GL_BACK,GL_AMBIENT_AND_DIFFUSE,cb); - } - glNormal3fv(n); - glVertex3fv(p); - } - } - glEnd(); - } - polys = 2*num_phi*(num_theta+1); - if (se->appearance[0] == APPEARANCE_MERIDIAN_BANDS) - polys /= 2; - } - - glDisable(GL_POLYGON_OFFSET_FILL); - glPolygonOffset(0.0f,0.0f); - if (se->graticule[0]) - { - glColor4f(1.0f,1.0f,1.0f,1.0f); - glLineWidth(2.0f); - glEnable(GL_LINE_SMOOTH); - glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); - glDisable(GL_LIGHTING); - glDisable(GL_LIGHT0); - glEnable(GL_BLEND); - glHint(GL_LINE_SMOOTH_HINT,GL_DONT_CARE); - /* Draw meridians. */ - for (j=0; jse[3*o]; - for (l=0; l<3; l++) - { - r = 0.0f; - for (m=0; m<3; m++) - r += mat[l][m]*xx[m]; - p[l] = r+se->offset3d[l]; - } - glVertex3fv(p); - } - glEnd(); - } - /* Draw parallels. */ - for (i=num_grid; i<=num_theta-num_grid; i+=num_grid) - { - glBegin(GL_LINE_LOOP); - for (j=num_phi-1; j>=0; j--) - { - o = j*(num_theta+1)+i; - phi = phi_range*j/num_phi+phi_min; - theta = theta_range*i/num_theta+theta_min; - xx = &se->se[3*o]; - for (l=0; l<3; l++) - { - r = 0.0f; - for (m=0; m<3; m++) - r += mat[l][m]*xx[m]; - p[l] = r+se->offset3d[l]; - } - glVertex3fv(p); - } - glEnd(); - } - glLineWidth(1.0f); - glPolygonOffset(0.0f,0.0f); - glDisable(GL_LINE_SMOOTH); - glBlendFunc(GL_SRC_ALPHA,GL_ONE); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - if (se->display_mode[0] != DISP_TRANSPARENT) - glDisable(GL_BLEND); - } - - return polys; + glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); + XDestroyImage(image); } -#ifdef HAVE_GLSL - -/* Draw the Bednorz sphere eversion using OpenGL's programmable - functionality. */ -static int bednorz_sphere_eversion_pf(ModeInfo *mi, float phi_min, - float phi_max, float theta_min, - float theta_max, int num_phi, - int num_theta, int numb_dist, - int numb_dir, int num_grid) +/* Generate the textures that show the the earth by day and night. */ +void gen_textures(ModeInfo *mi) { - static const GLfloat light_model_ambient[] = { 0.2, 0.2, 0.2, 1.0 }; - static const GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 1.0 }; - static const GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; - static const GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 }; - static const GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; - static const GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; - static const GLfloat mat_diff_front[] = { 1.0, 0.0, 0.0, 1.0 }; - static const GLfloat mat_diff_back[] = { 0.0, 1.0, 0.0, 1.0 }; - static const GLfloat mat_diff_trans_front[] = { 1.0, 0.0, 0.0, 0.7 }; - static const GLfloat mat_diff_trans_back[] = { 0.0, 1.0, 0.0, 0.7 }; - static const GLfloat mat_diff_white[] = { 1.0, 1.0, 1.0, 1.0 }; - static const GLuint blend_indices[6] = { 0, 1, 2, 2, 3, 0 }; - static const GLfloat blend_p[4][2] = - { { -1.0, -1.0 }, { 1.0, -1.0 }, { 1.0, 1.0 }, { -1.0, 1.0 } }; - static const GLfloat blend_t[4][2] = - { { 0.0, 0.0 }, { 1.0, 0.0 }, { 1.0, 1.0 }, { 0.0, 1.0 } }; - GLfloat light_direction[3], half_vector[3], len; - GLfloat p_mat[16], mv_mat[16], rot_mat[16]; - float mat[3][3]; - int i, j, k, l, m, o, pass, num_passes, ni; - int numb_dist_mask, numb_dist_min, numb_dist_max; - int numb_dir_mask, numb_dir_min, numb_dir_max; - float phi, theta, phi_range, theta_range; - float a, b, c, d, e, tau, tau_min, tau_max, r, t; - float x, y, z, zmin, zmax, rmax, scale, offset_z; - bednorz_shape_par bsp; - float qu[4], r1[3][3], r2[3][3]; - GLint draw_buf, read_buf; - GLsizeiptr index_offset; sphereeversionstruct *se = &sphereeversion[MI_SCREEN(mi)]; - int polys = 0; - if (!se->use_shaders) - return 0; + glGenTextures(3,se->tex_names); - numb_dist_mask = numb_dist-1; - numb_dist_min = numb_dist/4; - numb_dist_max = 3*numb_dist/4; - numb_dir_mask = numb_dir-1; - numb_dir_min = numb_dir/4; - numb_dir_max = 3*numb_dir/4; + /* Set up the earth by day texture. */ + glBindTexture(GL_TEXTURE_2D,se->tex_names[0]); + setup_xpm_texture(mi,earth_png,sizeof(earth_png)); - if (!se->buffers_initialized) - { - /* The indices only need to be computed once. */ - /* Compute the solid indices. */ - ni = 0; - se->num_solid_strips = 0; - se->num_solid_triangles = 0; - for (j=0; jsolid_indices[ni++] = o; - } - } - se->num_solid_strips++; - } - se->num_solid_triangles = 2*(num_theta+1); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,se->solid_indices_buffer); - glBufferData(GL_ELEMENT_ARRAY_BUFFER,ni*sizeof(GLuint), - se->solid_indices,GL_STATIC_DRAW); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0); - - /* Compute the meridian indices. */ - ni = 0; - se->num_meridian_strips = 0; - se->num_meridian_triangles = 0; - for (j=0; j= numb_dir_min) && - ((j & numb_dir_mask) < numb_dir_max)) - continue; - for (i=0; i<=num_theta; i++) - { - for (k=0; k<=1; k++) - { - l = i; - m = j+k; - o = m*(num_theta+1)+l; - se->meridian_indices[ni++] = o; - } - } - se->num_meridian_strips++; - } - se->num_meridian_triangles = 2*(num_theta+1); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,se->meridian_indices_buffer); - glBufferData(GL_ELEMENT_ARRAY_BUFFER,ni*sizeof(GLuint), - se->meridian_indices,GL_STATIC_DRAW); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0); - - /* Compute the parallel indices. */ - ni = 0; - se->num_parallel_strips = 0; - se->num_parallel_triangles = 0; - for (i=0; i= numb_dist_min) && - ((i & numb_dist_mask) < numb_dist_max)) - continue; - for (j=num_phi; j>=0; j--) - { - for (k=0; k<=1; k++) - { - l = i+k; - m = j; - o = m*(num_theta+1)+l; - se->parallel_indices[ni++] = o; - } - } - se->num_parallel_strips++; - } - se->num_parallel_triangles = 2*(num_phi+1); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,se->parallel_indices_buffer); - glBufferData(GL_ELEMENT_ARRAY_BUFFER,ni*sizeof(GLuint), - se->parallel_indices,GL_STATIC_DRAW); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0); - - /* Compute the line indices. */ - ni = 0; - for (j=0; jline_indices[ni++] = j*(num_theta+1)+i; - se->line_indices[ni++] = j*(num_theta+1)+i+1; - } - } - for (i=num_grid; i<=num_theta-num_grid; i+=num_grid) - { - for (j=num_phi; j>0; j--) - { - o = j*(num_theta+1)+i; - se->line_indices[ni++] = j*(num_theta+1)+i; - se->line_indices[ni++] = (j-1)*(num_theta+1)+i; - } - } - se->num_lines = ni; - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,se->line_indices_buffer); - glBufferData(GL_ELEMENT_ARRAY_BUFFER,ni*sizeof(GLuint), - se->line_indices,GL_STATIC_DRAW); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0); + /* Set up the earth by night texture. */ + glBindTexture(GL_TEXTURE_2D,se->tex_names[1]); + setup_xpm_texture(mi,earth_night_png,sizeof(earth_night_png)); - se->buffers_initialized = True; - } + /* Set up the earth water texture. */ + glBindTexture(GL_TEXTURE_2D,se->tex_names[2]); + setup_xpm_texture(mi,earth_water_png,sizeof(earth_water_png)); - tau = se->tau; - /* Apply easing functions to the different ranges of tau. */ - if (fabsf(tau) <= BEDNORZ_TAU4) - { - if (fabsf(tau) <= BEDNORZ_TAU1) - { - tau_min = 0.0f; - tau_max = BEDNORZ_TAU1; - } - else - if (fabsf(tau) <= BEDNORZ_TAU2) - { - tau_min = BEDNORZ_TAU1; - tau_max = BEDNORZ_TAU2; - } - else if (fabsf(tau) <= BEDNORZ_TAU3) - { - tau_min = BEDNORZ_TAU2; - tau_max = BEDNORZ_TAU3; - } - else /* fabsf(tau) <= BEDNORZ_TAU4 */ - { - tau_min = BEDNORZ_TAU3; - tau_max = BEDNORZ_TAU4; - } - e = 1.0f/(tau_min*tau_min-2.0f*tau_min*tau_max+tau_max*tau_max); - a = -2.0f*e; - b = 3.0f*(tau_min+tau_max)*e; - c = -6.0f*tau_min*tau_max*e; - d = tau_min*tau_max*(tau_min+tau_max)*e; - if (tau >= 0.0f) - tau = ((a*tau+b)*tau+c)*tau+d; - else - tau = ((a*tau-b)*tau+c)*tau-d; - } - /* Set up the shape parameters. */ - bsp.n = se->g; - bsp.kappa = bednorz_get_kappa(bsp.n); - bsp.omega = BEDNORZ_OMEGA; - bsp.t = bednorz_get_t(tau); - bsp.p = bednorz_get_p(tau); - bsp.q = bednorz_get_q(tau); - bsp.xi = bednorz_get_xi(tau); - bsp.eta = bednorz_get_eta(tau,se->eta_min); - bsp.alpha = bednorz_get_alpha(tau); - bsp.beta = bednorz_get_beta(tau,se->beta_max); - bsp.gamma = bednorz_get_gamma(bsp.alpha,bsp.beta); - bsp.lambda = bednorz_get_lambda(tau); - bsp.eps = bednorz_get_eps(tau,bsp.n); - - /* Compute the surface points and normals. */ - phi_range = phi_max-phi_min; - theta_range = theta_max-theta_min; - for (j=0; j<=num_phi; j++) - { - phi = phi_range*j/num_phi+phi_min; - for (i=0; i<=num_theta; i++) - { - o = j*(num_theta+1)+i; - theta = theta_range*i/num_theta+theta_min; - bednorz_point_normal(phi,theta,&bsp,&se->se[3*o],&se->sen[3*o]); - } - } - - /* Compute the z offset. */ - zmin = FLT_MAX; - zmax = -FLT_MAX; - for (j=0; j<=num_phi; j++) - { - for (i=0; i<=num_theta; i++) - { - o = j*(num_theta+1)+i; - z = se->se[3*o+2]; - if (z < zmin) - zmin = z; - if (z > zmax) - zmax = z; - } - } - offset_z = -0.5f*(zmin+zmax); - - /* Shift the surface in the z direction and compute the scale. */ - rmax = -FLT_MAX; - for (j=0; j<=num_phi; j++) - { - for (i=0; i<=num_theta; i++) - { - o = j*(num_theta+1)+i; - se->se[3*o+2] += offset_z; - x = se->se[3*o]; - y = se->se[3*o+1]; - z = se->se[3*o+2]; - r = x*x+y*y+z*z; - if (r > rmax) - rmax = r; - } - } - scale = 0.75f/sqrtf(rmax); - - glBindBuffer(GL_ARRAY_BUFFER,se->vertex_pos_buffer); - glBufferData(GL_ARRAY_BUFFER,3*(num_phi+1)*(num_theta+1)*sizeof(GLfloat), - se->se,GL_STREAM_DRAW); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0); - - glBindBuffer(GL_ARRAY_BUFFER,se->vertex_normal_buffer); - glBufferData(GL_ARRAY_BUFFER,3*(num_phi+1)*(num_theta+1)*sizeof(GLfloat), - se->sen,GL_STREAM_DRAW); - glBindBuffer(GL_ARRAY_BUFFER,0); - - /* Compute the rotation that rotates the surface in 3D, including the - trackball rotations. */ - rotateall(se->alpha,se->beta,se->delta,r1); - - gltrackball_get_quaternion(se->trackball,qu); - quat_to_rotmat(qu,r2); - - mult_rotmat(r2,r1,mat); - - glsl_Identity(p_mat); - if (se->projection == DISP_PERSPECTIVE) - { - glsl_Perspective(p_mat,60.0f,se->aspect,0.1f,10.0f); - } - else - { - if (se->aspect >= 1.0) - glsl_Orthographic(p_mat,-se->aspect,se->aspect,-1.0f,1.0f, - 0.1f,10.0f); - else - glsl_Orthographic(p_mat,-1.0f,1.0f,-1.0f/se->aspect,1.0f/se->aspect, - 0.1f,10.0f); - } - glsl_Identity(rot_mat); - for (i=0; i<3; i++) - for (j=0; j<3; j++) - rot_mat[GLSL__LINCOOR(i,j,4)] = mat[i][j]; - glsl_Identity(mv_mat); - glsl_Translate(mv_mat,se->offset3d[0],se->offset3d[1],se->offset3d[2]); - glsl_Scale(mv_mat,scale,scale,scale); - glsl_MultMatrix(mv_mat,rot_mat); - - len = sqrtf(light_position[0]*light_position[0]+ - light_position[1]*light_position[1]+ - light_position[2]*light_position[2]); - light_direction[0] = light_position[0]/len; - light_direction[1] = light_position[1]/len; - light_direction[2] = light_position[2]/len; - half_vector[0] = light_direction[0]; - half_vector[1] = light_direction[1]; - half_vector[2] = light_direction[2]+1.0f; - len = sqrtf(half_vector[0]*half_vector[0]+ - half_vector[1]*half_vector[1]+ - half_vector[2]*half_vector[2]); - half_vector[0] /= len; - half_vector[1] /= len; - half_vector[2] /= len; - - num_passes = se->anim_state == ANIM_TURN ? 2 : 1; - - for (pass=0; passpoly_shader_program); - - glClearColor(0.0f,0.0f,0.0f,1.0f); - glClearDepth(1.0f); - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - glUniformMatrix4fv(se->poly_mv_index,1,GL_FALSE,mv_mat); - glUniformMatrix4fv(se->poly_proj_index,1,GL_FALSE,p_mat); - - glUniform4fv(se->poly_front_ambient_index,1,mat_diff_white); - glUniform4fv(se->poly_front_diffuse_index,1,mat_diff_white); - glUniform4fv(se->poly_back_ambient_index,1,mat_diff_white); - glUniform4fv(se->poly_back_diffuse_index,1,mat_diff_white); - glVertexAttrib4f(se->poly_colorf_index,1.0f,1.0f,1.0f,1.0f); - glVertexAttrib4f(se->poly_colorb_index,1.0f,1.0f,1.0f,1.0f); - - if (se->display_mode[pass] == DISP_SURFACE) - { - glDisable(GL_CULL_FACE); - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LESS); - glDepthMask(GL_TRUE); - glDisable(GL_BLEND); - glUniform4fv(se->poly_glbl_ambient_index,1,light_model_ambient); - glUniform4fv(se->poly_lt_ambient_index,1,light_ambient); - glUniform4fv(se->poly_lt_diffuse_index,1,light_diffuse); - glUniform4fv(se->poly_lt_specular_index,1,light_specular); - glUniform3fv(se->poly_lt_direction_index,1,light_direction); - glUniform3fv(se->poly_lt_halfvect_index,1,half_vector); - glUniform4fv(se->poly_specular_index,1,mat_specular); - glUniform1f(se->poly_shininess_index,50.0f); - } - else /* se->display_mode[pass] == DISP_TRANSPARENT */ - { - glDisable(GL_CULL_FACE); - glDisable(GL_DEPTH_TEST); - glDepthMask(GL_FALSE); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA,GL_ONE); - glUniform4fv(se->poly_glbl_ambient_index,1,light_model_ambient); - glUniform4fv(se->poly_lt_ambient_index,1,light_ambient); - glUniform4fv(se->poly_lt_diffuse_index,1,light_diffuse); - glUniform4fv(se->poly_lt_specular_index,1,light_specular); - glUniform3fv(se->poly_lt_direction_index,1,light_direction); - glUniform3fv(se->poly_lt_halfvect_index,1,half_vector); - glUniform4fv(se->poly_specular_index,1,mat_specular); - glUniform1f(se->poly_shininess_index,50.0f); - } - - if (se->colors[pass] == COLORS_TWOSIDED) - { - if (se->display_mode[pass] == DISP_TRANSPARENT) - { - glUniform4fv(se->poly_front_ambient_index,1,mat_diff_trans_front); - glUniform4fv(se->poly_front_diffuse_index,1,mat_diff_trans_front); - glUniform4fv(se->poly_back_ambient_index,1,mat_diff_trans_back); - glUniform4fv(se->poly_back_diffuse_index,1,mat_diff_trans_back); - } - else - { - glUniform4fv(se->poly_front_ambient_index,1,mat_diff_front); - glUniform4fv(se->poly_front_diffuse_index,1,mat_diff_front); - glUniform4fv(se->poly_back_ambient_index,1,mat_diff_back); - glUniform4fv(se->poly_back_diffuse_index,1,mat_diff_back); - } - } - - glEnable(GL_POLYGON_OFFSET_FILL); - glPolygonOffset(1.0f,1.0f); - - glEnableVertexAttribArray(se->poly_pos_index); - glBindBuffer(GL_ARRAY_BUFFER,se->vertex_pos_buffer); - glVertexAttribPointer(se->poly_pos_index,3,GL_FLOAT,GL_FALSE,0,0); - - glEnableVertexAttribArray(se->poly_normal_index); - glBindBuffer(GL_ARRAY_BUFFER,se->vertex_normal_buffer); - glVertexAttribPointer(se->poly_normal_index,3,GL_FLOAT,GL_FALSE,0,0); - - if (se->colors[pass] != COLORS_TWOSIDED) - { - glEnableVertexAttribArray(se->poly_colorf_index); - glBindBuffer(GL_ARRAY_BUFFER,se->vertex_colorf_buffer[pass]); - glVertexAttribPointer(se->poly_colorf_index,4,GL_FLOAT,GL_FALSE,0,0); - - glEnableVertexAttribArray(se->poly_colorb_index); - glBindBuffer(GL_ARRAY_BUFFER,se->vertex_colorb_buffer[pass]); - glVertexAttribPointer(se->poly_colorb_index,4,GL_FLOAT,GL_FALSE,0,0); - } -#ifdef VERTEXATTRIBARRAY_WORKAROUND - else /* se->colors[pass] == COLORS_TWOSIDED */ - { - glEnableVertexAttribArray(se->poly_colorf_index); - glBindBuffer(GL_ARRAY_BUFFER,se->vertex_colorf_buffer[pass]); - glVertexAttribPointer(se->poly_colorf_index,4,GL_FLOAT,GL_FALSE,0,0); - - glEnableVertexAttribArray(se->poly_colorb_index); - glBindBuffer(GL_ARRAY_BUFFER,se->vertex_colorb_buffer[pass]); - glVertexAttribPointer(se->poly_colorb_index,4,GL_FLOAT,GL_FALSE,0,0); - } -#endif /* VERTEXATTRIBARRAY_WORKAROUND */ - - if (se->appearance[pass] == APPEARANCE_SOLID) - { - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,se->solid_indices_buffer); - for (i=0; inum_solid_strips; i++) - { - index_offset = se->num_solid_triangles*i*sizeof(GLuint); - glDrawElements(GL_TRIANGLE_STRIP,se->num_solid_triangles, - GL_UNSIGNED_INT,(const GLvoid *)index_offset); - } - polys += 2*num_phi*(num_theta+1); - } - else if (se->appearance[pass] == APPEARANCE_PARALLEL_BANDS) - { - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,se->parallel_indices_buffer); - for (i=0; inum_parallel_strips; i++) - { - index_offset = se->num_parallel_triangles*i*sizeof(GLuint); - glDrawElements(GL_TRIANGLE_STRIP,se->num_parallel_triangles, - GL_UNSIGNED_INT,(const GLvoid *)index_offset); - } - polys += num_theta*(num_phi+1); - } - else /* se->appearance[pass] == APPEARANCE_MERIDIAN_BANDS */ - { - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,se->meridian_indices_buffer); - for (i=0; inum_meridian_strips; i++) - { - index_offset = se->num_meridian_triangles*i*sizeof(GLuint); - glDrawElements(GL_TRIANGLE_STRIP,se->num_meridian_triangles, - GL_UNSIGNED_INT,(const GLvoid *)index_offset); - } - polys += num_phi*(num_theta+1); - } - - glDisableVertexAttribArray(se->poly_pos_index); - glDisableVertexAttribArray(se->poly_normal_index); - if (se->colors[pass] != COLORS_TWOSIDED) - { - glDisableVertexAttribArray(se->poly_colorf_index); - glDisableVertexAttribArray(se->poly_colorb_index); - } -#ifdef VERTEXATTRIBARRAY_WORKAROUND - else /* se->colors[pass] != COLORS_TWOSIDED */ - { - glDisableVertexAttribArray(se->poly_colorf_index); - glDisableVertexAttribArray(se->poly_colorb_index); - } -#endif /* VERTEXATTRIBARRAY_WORKAROUND */ - glBindBuffer(GL_ARRAY_BUFFER,0); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0); - - glDisable(GL_POLYGON_OFFSET_FILL); - glPolygonOffset(0.0f,0.0f); - - glUseProgram(0); - - if (se->graticule[pass]) - { - glUseProgram(se->line_shader_program); - - glUniformMatrix4fv(se->line_mv_index,1,GL_FALSE,mv_mat); - glUniformMatrix4fv(se->line_proj_index,1,GL_FALSE,p_mat); - glUniform4f(se->line_color_index,1.0f,1.0f,1.0f,1.0f); - - glLineWidth(2.0f); - - glEnableVertexAttribArray(se->line_pos_index); - glBindBuffer(GL_ARRAY_BUFFER,se->vertex_pos_buffer); - glVertexAttribPointer(se->line_pos_index,3,GL_FLOAT,GL_FALSE,0,0); - - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,se->line_indices_buffer); - - index_offset = 0; - glDrawElements(GL_LINES,se->num_lines,GL_UNSIGNED_INT, - (const void *)index_offset); - - glDisableVertexAttribArray(se->line_pos_index); - glBindBuffer(GL_ARRAY_BUFFER,0); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0); - - glUseProgram(0); - } - - if (num_passes == 2) - { - /* Copy the rendered image to a texture. */ - glGetIntegerv(GL_DRAW_BUFFER0,&draw_buf); - glGetIntegerv(GL_READ_BUFFER,&read_buf); - glReadBuffer(draw_buf); - glBindTexture(GL_TEXTURE_2D,se->color_textures[pass]); - glCopyTexSubImage2D(GL_TEXTURE_2D,0,0,0,0,0,se->WindW,se->WindH); - glReadBuffer(read_buf); - } - } - - if (num_passes == 2) - { - t = (float)se->turn_step/(float)se->num_turn; - /* Apply an easing function to t. */ - t = (3.0-2.0*t)*t*t; - - glUseProgram(se->blend_shader_program); - - glClearColor(0.0f,0.0f,0.0f,1.0f); - glClearDepth(1.0f); - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - - glDisable(GL_DEPTH_TEST); - glDepthMask(GL_FALSE); - glDisable(GL_BLEND); - - glUniform1f(se->blend_t_index,t); - - glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D,se->color_textures[0]); - glUniform1i(se->blend_sampler0_index,0); - - glActiveTexture(GL_TEXTURE1); - glBindTexture(GL_TEXTURE_2D,se->color_textures[1]); - glUniform1i(se->blend_sampler1_index,1); - - glEnableVertexAttribArray(se->blend_vertex_p_index); - glVertexAttribPointer(se->blend_vertex_p_index,2,GL_FLOAT,GL_FALSE, - 2*sizeof(GLfloat),blend_p); - - glEnableVertexAttribArray(se->blend_vertex_t_index); - glVertexAttribPointer(se->blend_vertex_t_index,2,GL_FLOAT,GL_FALSE, - 2*sizeof(GLfloat),blend_t); - - glDrawElements(GL_TRIANGLES,6,GL_UNSIGNED_INT,blend_indices); - - glActiveTexture(GL_TEXTURE0); - - glUseProgram(0); - } - - return polys; + glBindTexture(GL_TEXTURE_2D,0); } -static void init_glsl(ModeInfo *mi) +void init_glsl(ModeInfo *mi) { sphereeversionstruct *se = &sphereeversion[MI_SCREEN(mi)]; GLint gl_major, gl_minor, glsl_major, glsl_minor; @@ -2574,19 +685,15 @@ static void init_glsl(ModeInfo *mi) const GLchar *blend_vertex_shader_source[3]; const GLchar *blend_fragment_shader_source[4]; - se->solid_indices = calloc(2*NUMPH*(NUMTH+1),sizeof(float)); - se->parallel_indices = calloc(NUMPH*(NUMTH+1),sizeof(float)); - se->meridian_indices = calloc((NUMPH+1)*NUMTH,sizeof(float)); - se->line_indices = calloc(4*NUMPH*NUMTH/NUMGRID,sizeof(float)); - /* Determine whether to use shaders to render the sphere eversion. */ se->use_shaders = False; + se->use_mipmaps = False; se->buffers_initialized = False; se->poly_shader_program = 0; se->line_shader_program = 0; se->blend_shader_program = 0; se->max_tex_size = -1; - + if (!glsl_GetGlAndGlslVersions(&gl_major,&gl_minor,&glsl_major,&glsl_minor, &gl_gles3)) return; @@ -2693,6 +800,8 @@ static void init_glsl(ModeInfo *mi) "VertexColorF"); se->poly_colorb_index = glGetAttribLocation(se->poly_shader_program, "VertexColorB"); + se->poly_vertex_tex_index = glGetAttribLocation(se->poly_shader_program, + "VertexTexCoord"); se->poly_mv_index = glGetUniformLocation(se->poly_shader_program, "MatModelView"); se->poly_proj_index = glGetUniformLocation(se->poly_shader_program, @@ -2721,10 +830,19 @@ static void init_glsl(ModeInfo *mi) "MatSpecular"); se->poly_shininess_index = glGetUniformLocation(se->poly_shader_program, "MatShininess"); + se->poly_bool_textures_index = glGetUniformLocation(se->poly_shader_program, + "BoolTextures"); + se->poly_tex_samp_f_index = glGetUniformLocation(se->poly_shader_program, + "TextureSamplerFront"); + se->poly_tex_samp_b_index = glGetUniformLocation(se->poly_shader_program, + "TextureSamplerBack"); + se->poly_tex_samp_w_index = glGetUniformLocation(se->poly_shader_program, + "TextureSamplerWater"); if (se->poly_pos_index == -1 || se->poly_normal_index == -1 || se->poly_colorf_index == -1 || se->poly_colorb_index == -1 || + se->poly_vertex_tex_index == -1 || se->poly_mv_index == -1 || se->poly_proj_index == -1 || se->poly_glbl_ambient_index == -1 || @@ -2738,7 +856,11 @@ static void init_glsl(ModeInfo *mi) se->poly_front_diffuse_index == -1 || se->poly_back_diffuse_index == -1 || se->poly_specular_index == -1 || - se->poly_shininess_index == -1) + se->poly_shininess_index == -1 || + se->poly_bool_textures_index == -1 || + se->poly_tex_samp_f_index == -1 || + se->poly_tex_samp_b_index == -1 || + se->poly_tex_samp_w_index == -1) { glDeleteProgram(se->poly_shader_program); return; @@ -2827,189 +949,27 @@ static void init_glsl(ModeInfo *mi) glGenBuffers(1,&se->vertex_normal_buffer); glGenBuffers(2,se->vertex_colorf_buffer); glGenBuffers(2,se->vertex_colorb_buffer); + glGenBuffers(1,&se->vertex_tex_coord_buffer); glGenBuffers(1,&se->solid_indices_buffer); glGenBuffers(1,&se->parallel_indices_buffer); glGenBuffers(1,&se->meridian_indices_buffer); glGenBuffers(1,&se->line_indices_buffer); se->use_shaders = True; + if ((!gl_gles3 && gl_major >= 3) || gl_gles3) + se->use_mipmaps = True; } #endif /* HAVE_GLSL */ -static void init(ModeInfo *mi) -{ - sphereeversionstruct *se = &sphereeversion[MI_SCREEN(mi)]; - - if (deform_speed == 0.0f) - deform_speed = 10.0f; - - se->alpha = frand(120.0)-60.0; - se->beta = frand(120.0)-60.0; - se->delta = frand(360.0); - - se->eta_min = BEDNORZ_ETA_MIN; - se->beta_max = BEDNORZ_BETA_MAX; - - se->anim_state = ANIM_DEFORM; - se->tau = BEDNORZ_TAU_MAX; - se->defdir = -1; - se->turn_step = 0; - se->num_turn = 0; - - se->offset3d[0] = 0.0f; - se->offset3d[1] = 0.0f; - se->offset3d[2] = -1.8f; - - se->se = calloc(3*(NUMPH+1)*(NUMTH+1),sizeof(float)); - se->sen = calloc(3*(NUMPH+1)*(NUMTH+1),sizeof(float)); - se->colf[0] = calloc(4*(NUMPH+1)*(NUMTH+1),sizeof(float)); - se->colf[1] = calloc(4*(NUMPH+1)*(NUMTH+1),sizeof(float)); - se->colb[0] = calloc(4*(NUMPH+1)*(NUMTH+1),sizeof(float)); - se->colb[1] = calloc(4*(NUMPH+1)*(NUMTH+1),sizeof(float)); - -#ifdef HAVE_GLSL - init_glsl(mi); -#endif /* HAVE_GLSL */ - - setup_surface_colors(mi,-M_PI,M_PI,-M_PI/2.0,M_PI/2.0,NUMPH,NUMTH); -} - - -/* Redisplay the deformed surface. */ -static void display_sphereeversion(ModeInfo *mi) -{ - float alpha, beta, delta, dot, a, t, q[4]; - float *colt; - sphereeversionstruct *se = &sphereeversion[MI_SCREEN(mi)]; -#ifdef HAVE_GLSL - GLuint vertex_colort_buffer; -#endif /* HAVE_GLSL */ - - if (!se->button_pressed) - { - if (se->anim_state == ANIM_DEFORM) - { - se->tau += se->defdir*deform_speed*0.001; - if (se->tau < BEDNORZ_TAU_MIN) - { - se->tau = BEDNORZ_TAU_MIN; - se->defdir = -se->defdir; - se->anim_state = ANIM_TURN; - } - if (se->tau > BEDNORZ_TAU_MAX) - { - se->tau = BEDNORZ_TAU_MAX; - se->defdir = -se->defdir; - se->anim_state = ANIM_TURN; - } - if (se->anim_state == ANIM_TURN) - { - /* Convert the current rotation angles to a quaternion. */ - angles_to_quat(se->alpha,se->beta,se->delta,se->qs); - /* Determine random target rotation angles and convert them to the - target quaternion. */ - alpha = frand(120.0)-60.0; - beta = frand(120.0)-60.0; - delta = frand(360.0); - angles_to_quat(alpha,beta,delta,se->qe); - /* Compute the angle between qs and qe. */ - dot = (se->qs[0]*se->qe[0]+se->qs[1]*se->qe[1]+ - se->qs[2]*se->qe[2]+se->qs[3]*se->qe[3]); - if (dot < 0.0f) - { - se->qe[0] = -se->qe[0]; - se->qe[1] = -se->qe[1]; - se->qe[2] = -se->qe[2]; - se->qe[3] = -se->qe[3]; - dot = -dot; - } - a = 180.0/M_PI*acos(dot); - se->num_turn = ceil(a/TURN_STEP); - - /* Change the parameters randomly after one full eversion when a - turn to the new orientation starts. */ - /* Copy the current display modes to the values of the second pass. */ - se->display_mode[1] = se->display_mode[0]; - se->appearance[1] = se->appearance[0]; - se->colors[1] = se->colors[0]; - se->graticule[1] = se->graticule[0]; - /* Swap the front and back color buffers. */ - colt = se->colf[1]; - se->colf[1] = se->colf[0]; - se->colf[0] = colt; - colt = se->colb[1]; - se->colb[1] = se->colb[0]; - se->colb[0] = colt; -#ifdef HAVE_GLSL - /* Swap the OpenGL front and back color buffers. */ - if (se->use_shaders) - { - vertex_colort_buffer = se->vertex_colorf_buffer[1]; - se->vertex_colorf_buffer[1] = se->vertex_colorf_buffer[0]; - se->vertex_colorf_buffer[0] = vertex_colort_buffer; - vertex_colort_buffer = se->vertex_colorb_buffer[1]; - se->vertex_colorb_buffer[1] = se->vertex_colorb_buffer[0]; - se->vertex_colorb_buffer[0] = vertex_colort_buffer; - } -#endif /* HAVE_GLSL */ - /* Randomly select new display modes for the main pass. */ - if (se->random_display_mode) - se->display_mode[0] = random() % NUM_DISPLAY_MODES; - if (se->random_appearance) - se->appearance[0] = random() % NUM_APPEARANCES; - if (se->random_colors) - se->colors[0] = random() % NUM_COLORS; - if (se->random_graticule) - se->graticule[0] = random() & 1; - if (se->random_g) - se->g = random() % 4 + 2; - setup_surface_colors(mi,-M_PI,M_PI,-M_PI/2.0,M_PI/2.0,NUMPH,NUMTH); - } - } - else /* se->anim_state == ANIM_TURN */ - { - t = (float)se->turn_step/(float)se->num_turn; - /* Apply an easing function to t. */ - t = (3.0-2.0*t)*t*t; - quat_slerp(t,se->qs,se->qe,q); - quat_to_angles(q,&se->alpha,&se->beta,&se->delta); - se->turn_step++; - if (se->turn_step > se->num_turn) - { - se->turn_step = 0; - se->anim_state = ANIM_DEFORM; - } - } - - if (se->anim_state == ANIM_DEFORM) - { - se->alpha += speed_x*se->speed_scale; - if (se->alpha >= 360.0f) - se->alpha -= 360.0f; - se->beta += speed_y*se->speed_scale; - if (se->beta >= 360.0f) - se->beta -= 360.0f; - se->delta += speed_z*se->speed_scale; - if (se->delta >= 360.0f) - se->delta -= 360.0f; - } - } - -#ifdef HAVE_GLSL - if (se->use_shaders) - mi->polygon_count = bednorz_sphere_eversion_pf(mi,-M_PI,M_PI,-M_PI/2.0, - M_PI/2.0,NUMPH,NUMTH, - NUMBDIST,NUMBDIR, - NUMGRID); - else -#endif /* HAVE_GLSL */ - mi->polygon_count = bednorz_sphere_eversion_ff(mi,-M_PI,M_PI,-M_PI/2.0, - M_PI/2.0,NUMPH,NUMTH, - NUMBDIST,NUMBDIR, - NUMGRID); -} +/* + *----------------------------------------------------------------------------- + *----------------------------------------------------------------------------- + * Xlock hooks. + *----------------------------------------------------------------------------- + *----------------------------------------------------------------------------- + */ ENTRYPOINT void reshape_sphereeversion(ModeInfo *mi, int width, int height) @@ -3060,8 +1020,8 @@ ENTRYPOINT Bool sphereeversion_handle_event(ModeInfo *mi, XEvent *event) if (event->xany.type == ButtonPress && event->xbutton.button == Button1) { se->button_pressed = True; - gltrackball_start(se->trackball, event->xbutton.x, event->xbutton.y, - MI_WIDTH(mi), MI_HEIGHT(mi)); + gltrackball_start(se->trackball,event->xbutton.x,event->xbutton.y, + MI_WIDTH(mi),MI_HEIGHT(mi)); return True; } else if (event->xany.type == ButtonRelease && @@ -3072,8 +1032,8 @@ ENTRYPOINT Bool sphereeversion_handle_event(ModeInfo *mi, XEvent *event) } else if (event->xany.type == MotionNotify && se->button_pressed) { - gltrackball_track(se->trackball, event->xmotion.x, event->xmotion.y, - MI_WIDTH(mi), MI_HEIGHT(mi)); + gltrackball_track(se->trackball,event->xmotion.x,event->xmotion.y, + MI_WIDTH(mi),MI_HEIGHT(mi)); return True; } @@ -3081,14 +1041,6 @@ ENTRYPOINT Bool sphereeversion_handle_event(ModeInfo *mi, XEvent *event) } -/* - *----------------------------------------------------------------------------- - *----------------------------------------------------------------------------- - * Xlock hooks. - *----------------------------------------------------------------------------- - *----------------------------------------------------------------------------- - */ - /* *----------------------------------------------------------------------------- * Initialize sphereeversion. Called each time the window changes. @@ -3105,31 +1057,22 @@ ENTRYPOINT void init_sphereeversion(ModeInfo *mi) se->trackball = gltrackball_init(True); se->button_pressed = False; - /* Set the surface order. */ - if (!strcasecmp(surface_order,"2")) - { - se->g = 2; - se->random_g = False; - } - else if (!strcasecmp(surface_order,"3")) + /* Set the eversion method. */ + if (!strcasecmp(eversion_method,"random")) { - se->g = 3; - se->random_g = False; + se->eversion_method = random() % NUM_EVERSIONS; } - else if (!strcasecmp(surface_order,"4")) + else if (!strcasecmp(eversion_method,"analytic")) { - se->g = 4; - se->random_g = False; + se->eversion_method = EVERSION_ANALYTIC; } - else if (!strcasecmp(surface_order,"5")) + else if (!strcasecmp(eversion_method,"corrugations")) { - se->g = 5; - se->random_g = False; + se->eversion_method = EVERSION_CORRUGATIONS; } else { - se->g = random() % 4 + 2; - se->random_g = True; + se->eversion_method = random() % NUM_EVERSIONS; } /* Set the display mode. */ @@ -3187,12 +1130,31 @@ ENTRYPOINT void init_sphereeversion(ModeInfo *mi) se->colors[0] = COLORS_MERIDIAN; se->random_colors = False; } + else if (!strcasecmp(color_mode,"earth")) + { + se->colors[0] = COLORS_EARTH; + se->random_colors = False; + } else { se->colors[0] = random() % NUM_COLORS; se->random_colors = True; } + /* Set the 3d projection mode. */ + if (!strcasecmp(proj,"perspective")) + { + se->projection = DISP_PERSPECTIVE; + } + else if (!strcasecmp(proj,"orthographic")) + { + se->projection = DISP_ORTHOGRAPHIC; + } + else + { + se->projection = random() % NUM_DISP_MODES; + } + /* Set the graticule mode. */ if (!strcasecmp(graticule,"on")) { @@ -3210,18 +1172,67 @@ ENTRYPOINT void init_sphereeversion(ModeInfo *mi) se->random_graticule = True; } - /* Set the 3d projection mode. */ - if (!strcasecmp(proj,"perspective")) + /* Set the surface order. */ + if (!strcasecmp(surface_order,"2")) { - se->projection = DISP_PERSPECTIVE; + se->g = 2; + se->random_g = False; } - else if (!strcasecmp(proj,"orthographic")) + else if (!strcasecmp(surface_order,"3")) { - se->projection = DISP_ORTHOGRAPHIC; + se->g = 3; + se->random_g = False; + } + else if (!strcasecmp(surface_order,"4")) + { + se->g = 4; + se->random_g = False; + } + else if (!strcasecmp(surface_order,"5")) + { + se->g = 5; + se->random_g = False; } else { - se->projection = random() % NUM_DISP_MODES; + se->g = random() % 4 + 2; + se->random_g = True; + } + + /* Set the number of strips. */ + if (!strcasecmp(lunes,"lunes-1")) + { + se->strip_step = 8; + } + else if (!strcasecmp(lunes,"lunes-2")) + { + se->strip_step = 4; + } + else if (!strcasecmp(lunes,"lunes-4")) + { + se->strip_step = 2; + } + else if (!strcasecmp(lunes,"lunes-8")) + { + se->strip_step = 1; + } + else + { + se->strip_step = 1; + } + + /* Set the number of hemispheres. */ + if (!strcasecmp(hemispheres,"hemispheres-1")) + { + se->num_hemispheres = 1; + } + else if (!strcasecmp(hemispheres,"hemispheres-2")) + { + se->num_hemispheres = 2; + } + else + { + se->num_hemispheres = 2; } /* Make multiple screens rotate at slightly different rates. */ @@ -3230,7 +1241,10 @@ ENTRYPOINT void init_sphereeversion(ModeInfo *mi) if ((se->glx_context = init_GL(mi)) != NULL) { reshape_sphereeversion(mi,MI_WIDTH(mi),MI_HEIGHT(mi)); - init(mi); + if (se->eversion_method == EVERSION_ANALYTIC) + init_sphereeversion_analytic(mi); + else /* se->eversion_method == EVERSION_CORRUGATIONS */ + init_sphereeversion_corrugations(mi); } else { @@ -3238,6 +1252,7 @@ ENTRYPOINT void init_sphereeversion(ModeInfo *mi) } } + /* *----------------------------------------------------------------------------- * Called by the mainline code periodically to update the display. @@ -3257,12 +1272,15 @@ ENTRYPOINT void draw_sphereeversion(ModeInfo *mi) if (!se->glx_context) return; - glXMakeCurrent(display, window, *se->glx_context); + glXMakeCurrent(display,window,*se->glx_context); - display_sphereeversion(mi); + if (se->eversion_method == EVERSION_ANALYTIC) + display_sphereeversion_analytic(mi); + else /* se->eversion_method == EVERSION_CORRUGATIONS */ + display_sphereeversion_corrugations(mi); if (MI_IS_FPS(mi)) - do_fps (mi); + do_fps(mi); glFlush(); @@ -3270,14 +1288,6 @@ ENTRYPOINT void draw_sphereeversion(ModeInfo *mi) } -/* - *----------------------------------------------------------------------------- - * The display is being taken away from us. Free up malloc'ed - * memory and X resources that we've alloc'ed. - *----------------------------------------------------------------------------- - */ - - #ifndef STANDALONE ENTRYPOINT void change_sphereeversion(ModeInfo *mi) { @@ -3286,27 +1296,44 @@ ENTRYPOINT void change_sphereeversion(ModeInfo *mi) if (!ev->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *ev->glx_context); - init(mi); + glXMakeCurrent(MI_DISPLAY(mi),MI_WINDOW(mi),*ev->glx_context); + + if (se->eversion_method == EVERSION_ANALYTIC) + init_sphereeversion_analytic(mi); + else /* se->eversion_method == EVERSION_CORRUGATIONS */ + init_sphereeversion_corrugations(mi); } #endif /* !STANDALONE */ +/* + *----------------------------------------------------------------------------- + * The display is being taken away from us. Free up malloc'ed + * memory and X resources that we've alloc'ed. + *----------------------------------------------------------------------------- + */ + ENTRYPOINT void free_sphereeversion(ModeInfo *mi) { sphereeversionstruct *se = &sphereeversion[MI_SCREEN(mi)]; - if (!se->glx_context) return; - glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *se->glx_context); + if (!se->glx_context) + return; + + glXMakeCurrent(MI_DISPLAY(mi),MI_WINDOW(mi),*se->glx_context); - if (se->se) free(se->se); - if (se->sen) free(se->sen); + if (se->sp) free(se->sp); + if (se->sn) free(se->sn); if (se->colf[0]) free(se->colf[0]); if (se->colf[1]) free(se->colf[1]); if (se->colb[0]) free(se->colb[0]); if (se->colb[1]) free(se->colb[1]); gltrackball_free(se->trackball); #ifdef HAVE_GLSL + if (se->tex) free(se->tex); + if (se->tex_names[0]) glDeleteTextures(1,&se->tex_names[0]); + if (se->tex_names[1]) glDeleteTextures(1,&se->tex_names[1]); + if (se->tex_names[2]) glDeleteTextures(1,&se->tex_names[2]); if (se->solid_indices) free(se->solid_indices); if (se->parallel_indices) free(se->parallel_indices); if (se->meridian_indices) free(se->meridian_indices); @@ -3325,6 +1352,7 @@ ENTRYPOINT void free_sphereeversion(ModeInfo *mi) glDeleteBuffers(1,&se->vertex_normal_buffer); glDeleteBuffers(2,se->vertex_colorf_buffer); glDeleteBuffers(2,se->vertex_colorb_buffer); + glDeleteBuffers(1,&se->vertex_tex_coord_buffer); glDeleteBuffers(1,&se->solid_indices_buffer); glDeleteBuffers(1,&se->parallel_indices_buffer); glDeleteBuffers(1,&se->meridian_indices_buffer); diff --git a/hacks/glx/sphereeversion.h b/hacks/glx/sphereeversion.h new file mode 100644 index 00000000..8259d330 --- /dev/null +++ b/hacks/glx/sphereeversion.h @@ -0,0 +1,210 @@ +/* Copyright (c) 2021-2022 Carsten Steger . */ + +/* + * 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. + * + * This file is provided AS IS with no warranties of any kind. The author + * shall have no liability with respect to the infringement of copyrights, + * trade secrets or any patents by this file or any part thereof. In no + * event will the author be liable for any lost revenue or profits or + * other special, indirect and consequential damages. + */ + +/* This header makes outsidein be a mode of sphereeversion rather than + a standalone hack, since they are so similar in effect (if not + implementation). + */ + +#ifndef __SPHEREEVERSION_H__ +#define __SPHEREEVERSION_H__ + + +#define M_PI_F 3.14159265359f + + +/* For some strange reason, the color buffer must be initialized + and used on macOS. Otherwise one- and two-sided lighting will + not work. */ +#if (defined(HAVE_COCOA) || defined(__APPLE__)) && !defined(HAVE_IPHONE) +#define VERTEXATTRIBARRAY_WORKAROUND +#endif + + +#define EVERSION_ANALYTIC 0 +#define EVERSION_CORRUGATIONS 1 +#define NUM_EVERSIONS 2 + +#define DISP_SURFACE 0 +#define DISP_TRANSPARENT 1 +#define NUM_DISPLAY_MODES 2 + +#define APPEARANCE_SOLID 0 +#define APPEARANCE_PARALLEL_BANDS 1 +#define APPEARANCE_MERIDIAN_BANDS 2 +#define NUM_APPEARANCES 3 + +#define COLORS_TWOSIDED 0 +#define COLORS_PARALLEL 1 +#define COLORS_MERIDIAN 2 +#define COLORS_EARTH 3 +#define NUM_COLORS 4 + +#define DISP_PERSPECTIVE 0 +#define DISP_ORTHOGRAPHIC 1 +#define NUM_DISP_MODES 2 + +/* Animation states */ +#define ANIM_DEFORM 0 +#define ANIM_TURN 1 + +/* Angle of a single turn step */ +#define TURN_STEP 1.0 + + +#ifdef USE_GL + +#include "glsl-utils.h" +#include "gltrackball.h" + + +typedef struct { + GLint WindH, WindW; + GLXContext *glx_context; + /* Options */ + int eversion_method; + int display_mode[2]; + Bool random_display_mode; + int appearance[2]; + Bool random_appearance; + int colors[2]; + Bool random_colors; + int projection; + /* The next two parameters are used for the analytic eversion only */ + Bool graticule[2]; + Bool random_graticule; + /* The next two parameters are used for the corrugations eversion only */ + int num_hemispheres; + int strip_step; + /* 3D rotation angles */ + float alpha, beta, delta; + /* Animation state */ + int anim_state; + /* Deformation parameter for the analytic eversion */ + float tau; + /* Deformation parameter for the corrugations eversion */ + float time; + int defdir; + /* Turning parameters */ + int turn_step; + int num_turn; + float qs[4], qe[4]; + /* Two global shape parameters of the analytic sphere eversion */ + float eta_min, beta_max; + /* The order of the analytic sphere eversion */ + int g; + Bool random_g; + /* The viewing offset in 3d */ + float offset3d[3]; + /* The 3d coordinates of the surface and the corresponding normal vectors */ + float *sp; + float *sn; + /* The precomputed colors of the surface */ + float *colf[2]; + float *colb[2]; + /* Aspect ratio of the current window */ + float aspect; + /* Trackball states */ + trackball_state *trackball; + Bool button_pressed; + /* A random factor to modify the rotation speeds */ + float speed_scale; +#ifdef HAVE_GLSL + /* The precomputed texture coordinates of the sphere */ + float *tex; + /* The textures of earth by day (index 0), earth by night (index 1), and + the water mask (index 2) */ + GLuint tex_names[3]; + /* Indices for uniform variables and attributes */ + GLuint *solid_indices, *parallel_indices; + GLuint *meridian_indices, *line_indices; + Bool use_shaders, use_mipmaps, buffers_initialized; + GLuint poly_shader_program; + GLint poly_pos_index, poly_normal_index; + GLint poly_colorf_index, poly_colorb_index, poly_vertex_tex_index; + GLint poly_mv_index, poly_proj_index; + GLint poly_glbl_ambient_index, poly_lt_ambient_index; + GLint poly_lt_diffuse_index, poly_lt_specular_index; + GLint poly_lt_direction_index, poly_lt_halfvect_index; + GLint poly_front_ambient_index, poly_back_ambient_index; + GLint poly_front_diffuse_index, poly_back_diffuse_index; + GLint poly_specular_index, poly_shininess_index; + GLint poly_tex_samp_f_index, poly_tex_samp_b_index; + GLint poly_tex_samp_w_index, poly_bool_textures_index; + GLuint line_shader_program; + GLint line_pos_index, line_color_index; + GLint line_mv_index, line_proj_index; + GLint max_tex_size; + GLuint color_textures[2]; + GLuint blend_shader_program; + GLint blend_vertex_p_index, blend_vertex_t_index; + GLint blend_t_index, blend_sampler0_index, blend_sampler1_index; + GLuint vertex_pos_buffer, vertex_normal_buffer; + GLuint vertex_colorf_buffer[2], vertex_colorb_buffer[2]; + GLuint vertex_tex_coord_buffer; + GLuint solid_indices_buffer, parallel_indices_buffer; + GLuint meridian_indices_buffer, line_indices_buffer; + GLint num_solid_strips, num_solid_triangles; + GLint num_parallel_strips, num_parallel_triangles; + GLint num_meridian_strips, num_meridian_triangles; + GLint num_lines; +#endif /* HAVE_GLSL */ +} sphereeversionstruct; + +extern sphereeversionstruct *sphereeversion; + + +extern char *eversion_method; +extern char *mode; +extern char *appear; +extern char *color_mode; +extern char *graticule; +extern char *proj; +extern float speed_x; +extern float speed_y; +extern float speed_z; +extern float deform_speed; +extern char *surface_order; +extern char *lunes; +extern char *hemispheres; + + +extern void rotatex(float m[3][3], float phi); +extern void rotatey(float m[3][3], float phi); +extern void rotatez(float m[3][3], float phi); +extern void rotateall(float al, float be, float de, float m[3][3]); +extern void mult_rotmat(float m[3][3], float n[3][3], float o[3][3]); +extern void quat_to_angles(float q[4], float *alpha, float *beta, + float *delta); +extern void angles_to_quat(float alpha, float beta, float delta, float p[4]); +extern void quat_slerp(float t, float qs[4], float qe[4], float q[4]); +extern void color(sphereeversionstruct *se, float angle, const float mat[3][3], + float colf[4], float colb[4]); +extern void setup_xpm_texture(ModeInfo *mi, const unsigned char *data, + unsigned long size); +extern void gen_textures(ModeInfo *mi); +extern void init_glsl(ModeInfo *mi); + + +extern void init_sphereeversion_analytic(ModeInfo *mi); +extern void init_sphereeversion_corrugations(ModeInfo *mi); +extern void display_sphereeversion_analytic(ModeInfo *mi); +extern void display_sphereeversion_corrugations(ModeInfo *mi); + +#endif /* USE_GL */ + + +#endif /* __SPHEREEVERSION_H__ */ diff --git a/hacks/glx/sphereeversion.man b/hacks/glx/sphereeversion.man index 9be3abe3..3947db69 100644 --- a/hacks/glx/sphereeversion.man +++ b/hacks/glx/sphereeversion.man @@ -10,6 +10,9 @@ sphereeversion - Displays a sphere eversion. [\-root] [\-delay \fIusecs\fP] [\-fps] +[\-eversion-method \fImethod\fP] +[\-analytic] +[\-corrugations] [\-mode \fIdisplay-mode\fP] [\-surface] [\-transparent] @@ -18,15 +21,22 @@ sphereeversion - Displays a sphere eversion. [\-parallel-bands] [\-meridian-bands] [\-graticule \fImode\fP] -[\-surface-order \fIorder\fP] [\-colors \fIcolor-scheme\fP] [\-twosided-colors] [\-parallel-colors] [\-meridian-colors] +[\-earth-colors] [\-deformation-speed \fIfloat\fP] [\-projection \fImode\fP] [\-perspective] [\-orthographic] +[\-surface-order \fIorder\fP] +[\-lunes-1] +[\-lunes-2] +[\-lunes-4] +[\-lunes-8] +[\-hemispheres-1] +[\-hemispheres-2] [\-speed-x \fIfloat\fP] [\-speed-y \fIfloat\fP] [\-speed-z \fIfloat\fP] @@ -37,6 +47,19 @@ the eversion, the deformed sphere is allowed to intersect itself transversally. However, no creases or pinch points are allowed to occur. .PP +The sphere can be deformed with two eversion methods: analytic or +corrugations. The analytic sphere eversion method is described in the +following paper: Adam Bednorz, Witold Bednorz: "Analytic sphere +eversion using ruled surfaces", Differential Geometry and its +Applications 64:59-79, 2019. The corrugations sphere eversion method +is described in the video "Outside In" by the Geometry Center (Bill +Thurston, Silvio Levy, Delle Maxwell, Tamara Munzner, Nathaniel +Thurston, David Ben-Zvi, Matt Headrick, et al.), 1994, and the +accompanying booklet: Silvio Levy: "Making Waves - A Guide to the +Ideas Behind Outside In", A K Peters, Wellesley, MA, 1995. See also +the section "Brief Description of the Corrugations Sphere Eversion +Method" below. +.PP The deformed sphere can be projected to the screen either perspectively or orthographically. .PP @@ -51,37 +74,34 @@ latitude) or bands that run along the meridians (lines of longitude) of the sphere. If random mode is selected, the appearance is changed each time an eversion has been completed. .PP -It is also possible to display a graticule (i.e., a coordinate grid -consisting of parallel and meridian lines) on top of the surface. The -graticule mode can be set to on, off, or random. If random mode is -selected, the graticule mode is changed each time an eversion has been -completed. -.PP -It is possible to define a surface order of the sphere eversion as -random or as a value between 2 and 5. This determines the the -complexity of the deformation. For higher surface orders, some -z-fighting might occur around the central stage of the eversion, which -might lead to some irregular flickering of the displayed surface if it -is displayed as a solid object. For odd surface orders, z-fighting -will occur very close to the central stage of the eversion since the -deformed sphere is a doubly covered Boy surface (for surface order 3) -or a doubly covered generalized Boy surface (for surface order 5) in -this case. If you find this distracting, you should set the surface -order to 2. If a random surface order is selected, the surface order -is changed each time an eversion has been completed. +For the analytic sphere eversion, it is also possible to display a +graticule (i.e., a coordinate grid consisting of parallel and meridian +lines) on top of the surface. The graticule mode can be set to on, +off, or random. If random mode is selected, the graticule mode is +changed each time an eversion has been completed. .PP The colors with with the sphere is drawn can be set to two-sided, -parallel, meridian, or random. In two-sided mode, the sphere is drawn -with red on one side and green on the other side. In parallel mode, -the sphere is displayed with colors that run from red to cyan on one -side of the surface and from green to violet on the other side. The +parallel, meridian, earth, or random. In two-sided mode, the sphere +is drawn with red on one side and green on the other side (analytic +eversion) or with gold on one side and purple on the other side +(corrugations eversion). In parallel mode, the sphere is displayed +with colors that run from blue to white to orange on one side of the +surface and from magenta to black to green on the other side. The colors are aligned with the parallels of the sphere in this mode. In meridian mode, the the sphere is displayed with colors that run from -red to white to cyan to black and back to red on one side of the -surface and from green to white to violet to black and back to green -on the other side. The colors are aligned with the meridians of the -sphere in this mode. If random mode is selected, the color scheme is -changed each time an eversion has been completed. +blue to white to orange to black and back to blue on one side of the +surface and from magenta to white to green to black and back to +magenta on the other side. The colors are aligned with the meridians +of the sphere in this mode. In earth mode, the sphere is drawn with a +texture of earth by day on one side and with a texture of earth by +night on the other side. Initially, the earth by day is on the +outside and the earth by night on the inside. After the first +eversion, the earth by night will be on the outside. All points of +the earth on the inside and outside are at the same positions on the +sphere. Since an eversion transforms the sphere into its inverse, the +earth by night will appear with all continents mirror reversed. If +random mode is selected, the color scheme is changed each time an +eversion has been completed. .PP By default, the sphere is rotated to a new viewing position each time an eversion has been completed. In addition, it is possible to rotate @@ -90,9 +110,59 @@ three coordinate axes around which the sphere rotates can be chosen arbitrarily. For best effects, however, it is suggested to rotate only around the z axis while the sphere is deforming. .PP -This program is inspired by the following paper: Adam Bednorz, Witold -Bednorz: "Analytic sphere eversion using ruled surfaces", Differential -Geometry and its Applications 64:59-79, 2019. +For the analytic sphere eversion, it is possible to define a surface +order of the sphere eversion as random or as a value between 2 and 5. +This determines the the complexity of the deformation. For higher +surface orders, some z-fighting might occur around the central stage +of the eversion, which might lead to some irregular flickering of the +displayed surface if it is displayed as a solid object. For odd +surface orders, z-fighting will occur very close to the central stage +of the eversion since the deformed sphere is a doubly covered Boy +surface (for surface order 3) or a doubly covered generalized Boy +surface (for surface order 5) in this case. If you find this +distracting, you should set the surface order to 2. If a random +surface order is selected, the surface order is changed each time an +eversion has been completed. +.SH BRIEF DESCRIPTION OF THE CORRUGATIONS SPHERE EVERSION METHOD +The corrugations sphere eversion method is described in detail in the +video and booklet mentioned above. Briefly, the method works as +follows: Imagine the sphere cut into eight spherical lunes (spherical +biangles). Now imagine each lune to be a belt. The ends of the belt +(which correspond to the north and south poles of the sphere) are +pushed past each other. This creates a loop in the belt. If the belt +were straightened out, it would contain a 360 degree rotation. This +rotation can be removed by rotating each end of the belt by 180 +degrees. Finally, the belt is pushed to the opposite side of the +sphere, which causes the side of the belt that initially was inside +the sphere to appear on the outside. +.PP +The method described so far only works for a single lune (belt) and +not for the entire sphere. To make it work for the entire sphere, +corrugations (i.e., waves) must be added to the sphere. This happens +in the first phase of the eversion. Then, the method described above +is applied to the eight lunes. Finally, the corrugations are removed +to obtain the everted sphere. +.PP +To see the eversion for a single lune, the option \fB\-lunes-1\fP can +be used. Using this option, the eversion, as described above, is +easier to understand. It is also possible to display two lunes using +\fB\-lunes-2\fP and four lunes using \fB\-lunes-4\fP. Using fewer +than eight lunes reduces the visual complexity of the eversion and may +help to understand the method. +.PP +Furthermore, it is possible to display only one hemisphere using the +option \fB\-hemispheres-1\fP. This allows to see what is happening in +the center of the sphere during the eversion. Note that the north and +south half of the sphere move in a symmetric fashion during the +eversion. Hence, the eversion is actually composed of 16 semi-lunes +(spherical triangles from the equator to the poles) that all deform in +the same manner. By specifying \fB\-lunes-1 \-hemispheres-1\fP, the +deformation of one semi-lune can be observed. +.PP +Note that the options described above are only intended for +educational purposes. They are not used if none of them are +explicitly specified. + .SH OPTIONS .I sphereeversion accepts the following options: @@ -118,6 +188,18 @@ animation. Default 10000, or 1/100th second. Display the current frame rate, CPU load, and polygon count. .PP The following three options are mutually exclusive. They determine +which sphere eversion method is used. +.TP 8 +.B \-eversion-method random +Use a random sphere eversion method (default). +.TP 8 +.B \-eversion-method analytic \fP(Shortcut: \fB\-analytic\fP) +Use the analytic sphere eversion method. +.TP 8 +.B \-eversion-method corrugations \fP(Shortcut: \fB\-corrugations\fP) +Use the corrugations sphere eversion method. +.PP +The following three options are mutually exclusive. They determine how the deformed sphere is displayed. .TP 8 .B \-mode random @@ -147,7 +229,9 @@ Display the sphere as see-through bands that lie along the meridians of the sphere. .PP The following three options are mutually exclusive. They determine -whether a graticule is displayed on top of the sphere. +whether a graticule is displayed on top of the sphere. These options +only have an effect if the analytic sphere eversion method is +selected. .TP 8 .B \-graticule random Randomly choose whether to display a graticule (default). @@ -158,15 +242,7 @@ Display a graticule. .B \-graticule off Do not display a graticule. .PP -The following option determines the order of the surface to be -displayed. -.TP 8 -.B \-surface-order \fIorder\fP -The surface order can be set to random or to a value between 2 and 5 -(default: random). This determines the the complexity of the -deformation. -.PP -The following four options are mutually exclusive. They determine how +The following five options are mutually exclusive. They determine how to color the deformed sphere. .TP 8 .B \-colors random @@ -174,22 +250,33 @@ Display the sphere with a random color scheme (default). .TP 8 .B \-colors twosided \fP(Shortcut: \fB\-twosided-colors\fP) Display the sphere with two colors: red on one side and green on the -other side. +other side (analytic eversion) or gold on one side and purple on the +other side (corrugations eversion). .TP 8 .B \-colors parallel \fP(Shortcut: \fB\-parallel-colors\fP) -Display the sphere with colors that run from red to cyan on one side -of the surface and from green to violet on the other side. The colors -are aligned with the parallels of the sphere. If the sphere is -displayed as parallel bands, each band will be displayed with a -different color. +Display the sphere with colors that run from from blue to white to +orange on one side of the surface and from magenta to black to green +on the other side. The colors are aligned with the parallels of the +sphere. If the sphere is displayed as parallel bands, each band will +be displayed with a different color. .TP 8 .B \-colors meridian \fP(Shortcut: \fB\-meridian-colors\fP) -Display the sphere with colors that run from red to white to cyan to -black and back to red on one side of the surface and from green to -white to violet to black and back to green on the other side. The -colors are aligned with the meridians of the sphere. If the sphere is -displayed as meridian bands, each band will be displayed with a -different color. +Display the sphere with colors that run from from blue to white to +orange to black and back to blue on one side of the surface and from +magenta to white to green to black and back to magenta on the other +side. The colors are aligned with the meridians of the sphere. If +the sphere is displayed as meridian bands, each band will be displayed +with a different color. +.TP 8 +.B \-colors earth \fP(Shortcut: \fB\-earth-colors\fP) +Display the sphere with a texture of earth by day on one side and with +a texture of earth by night on the other side. Initially, the earth +by day is on the outside and the earth by night on the inside. After +the first eversion, the earth by night will be on the outside. All +points of the earth on the inside and outside are at the same +positions on the sphere. Since an eversion transforms the sphere into +its inverse, the earth by night will appear with all continents mirror +reversed. .PP The following option determines the deformation speed. .TP 8 @@ -211,6 +298,41 @@ Project the sphere from 3d to 2d using a perspective projection. .B \-projection orthographic \fP(Shortcut: \fB\-orthographic\fP) Project the sphere from 3d to 2d using an orthographic projection. .PP +The following option determines the order of the surface to be +displayed. This option only has an effect if the analytic sphere +eversion method is selected. +.TP 8 +.B \-surface-order \fIorder\fP +The surface order can be set to random or to a value between 2 and 5 +(default: random). This determines the the complexity of the +deformation. +.PP +The following four options are mutually exclusive. They determine how +many lunes of the sphere are displayed. These options only have an +effect if the corrugations sphere eversion method is selected. +.TP 8 +.B \-lunes-1 +Display one of the eight lunes that form the sphere. +.TP 8 +.B \-lunes-2 +Display two of the eight lunes that form the sphere. +.TP 8 +.B \-lunes-4 +Display four of the eight lunes that form the sphere. +.TP 8 +.B \-lunes-8 +Display all eight lunes that form the sphere (default). +.PP +The following two options are mutually exclusive. They determine how +many hemispheres of the sphere are displayed. These options only have +an effect if the corrugations sphere eversion method is selected. +.TP 8 +.B \-hemispheres-1 +Display only one hemisphere of the sphere. +.TP 8 +.B \-hemispheres-2 +Display both hemispheres of the sphere (default). +.PP The following three options determine the rotation speed of the deformed sphere around the three possible axes. The rotation speed is measured in degrees per frame. The speeds should be set to relatively @@ -252,5 +374,13 @@ notice and this permission notice appear in supporting documentation. No representations are made about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. +.PP +Parts of the code in this program are based on the program +sphereEversion-0.4-src.zip +(https://profs.etsmtl.ca/mmcguffin/eversion/) by Michael J. McGuffin, +which, in turn, is based on the program evert.tar.Z +(http://www.geom.uiuc.edu/docs/outreach/oi/software.html) developed +by Nathaniel Thurston at the Geometry Center. The modified code is +used with permission. .SH AUTHOR Carsten Steger , 01-jun-2020. diff --git a/hacks/glx/squirtorus.c b/hacks/glx/squirtorus.c new file mode 100644 index 00000000..e5a3b4e9 --- /dev/null +++ b/hacks/glx/squirtorus.c @@ -0,0 +1,1023 @@ +/* squirtorus, Copyright (c) 2022 Jamie Zawinski + * Eat stars, shit rainbows. + * + * 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. No representations are made about the suitability of this + * software for any purpose. It is provided "as is" without express or + * implied warranty. + */ + +#define DEFAULTS "*delay: 30000 \n" \ + "*count: 16 \n" \ + "*groundColor: #FFBE86\n" \ + "*holeColor: #FF0000\n" \ + "*starColor: #CCCC00\n" \ + "*showFPS: False \n" \ + "*wireframe: False \n" + +# define release_sq 0 + +#define DEF_SPEED "1.0" + +#define SPHINCTER_SIZE 0.11 +#define SPHINCTER_OPEN 0.45 +#define SPHINCTER_FRAMES 100 +#define MAX_EJECTA 60 +#define EJECTA_SPEED 0.07 +#define EJECTA_RATE 6 +#define NSTARS 200 + +#include "xlockmore.h" +#include "gltrackball.h" +#include "colors.h" +#include "hsv.h" +#include "spline.h" +#include "normals.h" + +#include + +#ifdef USE_GL /* whole file */ + +#define BELLRAND(n) ((frand((n)) + frand((n)) + frand((n))) / 3) + +typedef struct { + GLfloat w, y, dy; + GLfloat color[4]; + int countdown; +} ejecta; + +typedef struct { + enum { IDLE, OPENING, OPEN, CLOSING } state; + double ratio; + int nejecta, ejected, finished; + ejecta ejecta[MAX_EJECTA]; + GLfloat size, x, y; +} sphincter; + +typedef struct { + GLfloat x, y, dx, dy, th, dth; +} star; + + +typedef struct { + GLXContext *glx_context; + trackball_state *trackball; + Bool button_down_p; + GLfloat dx, dy; + int nsphincters; + sphincter *sphincters; + GLfloat ground_color[4], hole_color[4]; + int ncolors; + XColor *colors; + + GLuint ground_dlist; + int ground_npolys; + + GLuint star_dlist; + int star_npolys; + star stars[NSTARS]; + GLfloat star_color[4]; + + GLuint sphincter_dlist0; + int sphincter_npolys; + + GLuint ejecta_dlist0; + int ejecta_npolys; + int torus_polys; + int torus_step; + XYZ *torus_points; + XYZ *torus_normals; + +} sq_configuration; + +static sq_configuration *bps = NULL; + +static GLfloat speed; + +static XrmOptionDescRec opts[] = { + { "-speed", ".speed", XrmoptionSepArg, 0 }, +}; + +static argtype vars[] = { + {&speed, "speed", "Speed", DEF_SPEED, t_Float}, +}; + +ENTRYPOINT ModeSpecOpt sq_opts = { + countof(opts), opts, countof(vars), vars, NULL}; + + +static void +parse_color (ModeInfo *mi, char *key, GLfloat color[4]) +{ + XColor xcolor; + char *string = get_string_resource (mi->dpy, key, "Color"); + if (!XParseColor (mi->dpy, mi->xgwa.colormap, string, &xcolor)) + { + fprintf (stderr, "%s: unparsable color in %s: %s\n", progname, + key, string); + exit (1); + } + free (string); + + color[0] = xcolor.red / 65536.0; + color[1] = xcolor.green / 65536.0; + color[2] = xcolor.blue / 65536.0; + color[3] = 1; +} + + +/* Honestly I don't know why I wrote this thing. It came to me in a dream. + It's been a weird pandemic, ok? */ +static void +new_sphincter (ModeInfo *mi, sphincter *s, Bool early_p) +{ + sq_configuration *bp = &bps[MI_SCREEN(mi)]; + double ss; + double depth = 0.5; + int i; + s->state = IDLE; + s->ratio = 0; + s->nejecta = BELLRAND (MAX_EJECTA); + s->ejected = 0; + s->finished = s->nejecta; + s->size = SPHINCTER_SIZE * (0.8 + frand(0.4)); + ss = s->size * 1.8; + + memset (s->ejecta, 0, sizeof(*s->ejecta)); + for (i = 0; i < s->nejecta; i++) + { + ejecta *e = &s->ejecta[i]; + e->y = -1; /* idle */ + } + + /* Place it randomly but try not to overlap an existing one. */ + for (i = 0; i < 1000; i++) + { + int j; + Bool ok = True; + s->x = frand (1.0) - 0.5; + s->y = (early_p && i == 0 + ? frand (0.5) + 0.25 + : -frand (depth)); + + for (j = 0; j < bp->nsphincters; j++) + { + sphincter *s2 = &bp->sphincters[j]; + double dx = s2->x - s->x; + double dy = s2->y - s->y; + double d2 = dx*dx + dy*dy; + if (s != s2 && d2 <= ss*ss) + { + ok = False; + break; + } + } + if (ok) break; + depth += 0.1; /* If we're having trouble placing, go farther back */ + } + +} + + +static GLfloat +ease_fn (GLfloat r) +{ + return cos ((r/2 + 1) * M_PI) + 1; /* Smooth curve up, end at slope 1. */ +} + + +static GLfloat +ease_ratio (GLfloat r) +{ + GLfloat ease = 0.35; + if (r <= 0) return 0; + else if (r >= 1) return 1; + else if (r <= ease) return ease * ease_fn (r / ease); + else if (r > 1-ease) return 1 - ease * ease_fn ((1 - r) / ease); + else return r; +} + + +static void +compute_unit_torus (ModeInfo *mi, double ratio, int slices1, int slices2) +{ + sq_configuration *bp = &bps[MI_SCREEN(mi)]; + Bool wire = MI_IS_WIREFRAME (mi); + int i, j, k, fp; + + if (wire) slices1 /= 2; + if (wire) slices2 /= 4; + if (slices1 < 3) slices1 = 3; + if (slices2 < 3) slices2 = 3; + + bp->torus_polys = slices1 * (slices2+1) * 2; + bp->torus_points = (XYZ *) calloc (bp->torus_polys + 1, + sizeof (*bp->torus_points)); + bp->torus_normals = (XYZ *) calloc (bp->torus_polys + 1, + sizeof (*bp->torus_normals)); + bp->torus_step = 2 * (slices2+1); + fp = 0; + for (i = 0; i < slices1; i++) + for (j = 0; j <= slices2; j++) + for (k = 0; k <= 1; k++) + { + double s = (i + k) % slices1 + 0.5; + double t = j % slices2; + XYZ p; + p.x = cos(t*M_PI*2/slices2) * cos(s*M_PI*2/slices1); + p.y = sin(t*M_PI*2/slices2) * cos(s*M_PI*2/slices1); + p.z = sin(s*M_PI*2/slices1); + bp->torus_normals[fp] = p; + + p.x = (1 + ratio * cos(s*M_PI*2/slices1)) * cos(t*M_PI*2/slices2) / 2; + p.y = (1 + ratio * cos(s*M_PI*2/slices1)) * sin(t*M_PI*2/slices2) / 2; + p.z = ratio * sin(s*M_PI*2/slices1) / 2; + bp->torus_points[fp] = p; + fp++; + } + if (fp != bp->torus_polys) abort(); + bp->torus_polys = fp; +} + + +static int +draw_torus (ModeInfo *mi) +{ + sq_configuration *bp = &bps[MI_SCREEN(mi)]; + Bool wire = MI_IS_WIREFRAME (mi); + int i, j; + int strips = bp->torus_polys / bp->torus_step; + int points = 0; + + glFrontFace (GL_CW); + for (i = 0; i < strips; i++) + { + int ii = i * bp->torus_step; + + glBegin (wire ? GL_LINE_STRIP : GL_QUAD_STRIP); + for (j = 0; j < bp->torus_step; j++) + { + XYZ sp = bp->torus_points[ii+j]; + XYZ sn = bp->torus_normals[ii+j]; + glNormal3f(sn.x, sn.y, sn.z); + glVertex3f(sp.x, sp.y, sp.z); + points++; + } + glEnd(); + } + return points; +} + + +/* Usul, we have wormsign the likes of which even God has never seen. */ +static void +draw_ejecta (ModeInfo *mi, ejecta *e) +{ + sq_configuration *bp = &bps[MI_SCREEN(mi)]; + double sc, r; + int frame; + + if (e->y <= 0) return; + + r = 0.5 + e->dy * 8.0; /* torus thickness */ + if (r > 1) r = 1; + if (r < 0) r = 0; + if (r <= 0) return; + + frame = r * (SPHINCTER_FRAMES - 1); + + sc = e->w * 2; /* torus width */ + sc *= 1 - e->dy * 6; + + glPushMatrix(); + glTranslatef (0, 0, e->y); + glScalef (sc, sc, sc); + + glColor4fv (e->color); + glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, e->color); + glCallList (bp->ejecta_dlist0 + frame); + mi->polygon_count += bp->ejecta_npolys; + + glPopMatrix(); +} + + +static spline * +make_sphincter_profile (int pixels) +{ + spline *s = make_spline (pixels); + s->n_controls = 0; + +# define PT(x,y) \ + s->control_x[s->n_controls] = pixels * (x); \ + s->control_y[s->n_controls] = pixels * (y); \ + s->n_controls++ + PT ( 0.00, -2.00); + PT ( 0.03, -0.25); + PT ( 0.04, 0.00); + PT ( 0.05, 0.20); + PT ( 0.30, 0.20); + PT ( 0.50, 0.05); + PT ( 0.80, 0.00); + PT ( 1.00, 0.00); +# undef PT + + compute_spline (s); + +# if 0 + { + int i; + fprintf (stderr, "open 'http://www.graphreader.com/plotter?x="); + for (i = 0; i < s->n_points; i++) + fprintf (stderr, "%s%d", (i == 0 ? "" : ","), s->points[i].x); + fprintf (stderr, "&y="); + for (i = 0; i < s->n_points; i++) + fprintf (stderr, "%s%d", (i == 0 ? "" : ","), s->points[i].y); + fprintf (stderr, "'\n"); + exit (1); + } +# endif + + return s; +} + + +/* Just spit on your hand and see what's gurgling around in there. */ +static int +render_sphincter (ModeInfo *mi, spline *sp, int rez, int frame) +{ + sq_configuration *bp = &bps[MI_SCREEN(mi)]; + int wire = MI_IS_WIREFRAME(mi); + + GLfloat step = (wire ? 0.1 : 0.05); + int strips = (M_PI * 2) / step; + int quads = sp->n_points; + XYZ *pts = (XYZ *) calloc (strips * quads, sizeof(*pts)); + XYZ *ns = (XYZ *) calloc (strips * quads, sizeof(*ns)); + GLfloat colors[SPHINCTER_FRAMES+1][4]; + int polys = 0; + int i, j; + + GLfloat sc = frame / (GLfloat) SPHINCTER_FRAMES; + sc = ease_ratio (sc); + sc *= SPHINCTER_OPEN; + + /* Compute each vertex */ + for (i = 0; i < strips; i++) + { + GLfloat th = (i / (GLfloat) strips) * M_PI * 2; + GLfloat x0 = cos (th); + GLfloat y0 = sin (th); + GLfloat ripple = 1 + (0.07 * sin (th * 13)); + + for (j = 0; j < quads; j++) + { + GLfloat r0 = (sp->points[j].x / (GLfloat) rez) * (1-sc) + sc; + GLfloat z0 = (sp->points[j].y / (GLfloat) rez); + XYZ *p = &pts[i * quads + j]; + p->x = x0 * r0; + p->y = y0 * r0; + p->z = z0 * (j < quads-4 ? ripple : 1); + } + } + + /* Compute each face normal */ + for (i = 0; i < strips; i++) + { + int i2 = (i + 1) % strips; + for (j = 0; j < quads - 1; j++) + { + XYZ *p0 = &pts[i * quads + j]; + XYZ *p1 = &pts[i * quads + j + 1]; + XYZ *p2 = &pts[i2 * quads + j]; + /* XYZ *p3 = &pts[i2 * quads + j + 1]; */ + XYZ *n0 = &ns[i * quads + j]; + *n0 = calc_normal (*p0, *p1, *p2); + } + ns[i * quads + j].z = 1; + } + + /* Colors of radii */ + for (i = 0; i < quads; i++) + { + GLfloat cr = i / (GLfloat) (quads-1); /* Color ratio */ + GLfloat ir = cr * 1.5; /* Intensity ratio */ + cr += 0.3; + if (cr > 1) cr = 1; + if (ir > 1) ir = 1; + ir *= ir; +# define CC(J) \ + colors[i][J] = ir * (bp->ground_color[J] + \ + ((1 - cr) * \ + (bp->hole_color[J] - bp->ground_color[J]))) + CC(0); + CC(1); + CC(2); + colors[i][3] = 1; +# undef CC + } + + /* Render quads */ + glPushMatrix(); + glFrontFace (GL_CCW); + if (!wire) glBegin (GL_QUADS); + for (i = 0; i < strips; i++) + { + int i2 = (i + 1) % strips; + for (j = 0; j < quads - 1; j++) + { + XYZ *p0 = &pts[i * quads + j]; + XYZ *p1 = &pts[i * quads + j + 1]; + XYZ *p2 = &pts[i2 * quads + j]; + XYZ *p3 = &pts[i2 * quads + j + 1]; + + /* Vertex normal is the normal of its following face. It should + really be the average of the neighboring face normals, but this + is close enough. */ + XYZ *n0 = &ns[i * quads + j]; + XYZ *n1 = &ns[i * quads + j + 1]; + XYZ *n2 = &ns[i2 * quads + j]; + XYZ *n3 = &ns[i2 * quads + j + 1]; + + if (j < 3) continue; /* We can skip the deep hole quads */ + + if (wire) glBegin (GL_LINE_LOOP); + + glColor4fv (colors[j]); + glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, colors[j]); + glNormal3f (n0->x, n0->y, n0->z); + glVertex3f (p0->x, p0->y, p0->z); + + glColor4fv (colors[j+1]); + glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, colors[j+1]); + glNormal3f (n1->x, n1->y, n1->z); + glVertex3f (p1->x, p1->y, p1->z); + + glColor4fv (colors[j+1]); + glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, colors[j+1]); + glNormal3f (n3->x, n3->y, n3->z); + glVertex3f (p3->x, p3->y, p3->z); + + glColor4fv (colors[j]); + glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, colors[j]); + glNormal3f (n2->x, n2->y, n2->z); + glVertex3f (p2->x, p2->y, p2->z); + + if (wire) glEnd(); + polys++; + } + } + if (!wire) glEnd(); + + /* Mask out the hole so that the ground doesn't cover it. */ + if (! wire) + { + /* Fill depth buffer only, don't render */ + glColorMask (GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); + glFrontFace (GL_CCW); + glNormal3f (0, 0, -1); + glBegin (wire ? GL_LINE_LOOP : GL_TRIANGLE_FAN); + glVertex3f (0, 0, 0); + for (i = 0; i <= strips; i++) + { + GLfloat th = (i / (GLfloat) strips) * M_PI * 2; + glVertex3f (cos(th), sin(th), 0); + polys++; + } + glEnd(); + glColorMask (GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + } + glPopMatrix(); + + free (pts); + free (ns); + + return polys; +} + + +static void +move_sphincters (ModeInfo *mi) +{ + sq_configuration *bp = &bps[MI_SCREEN(mi)]; + int i, j; + + for (i = 0; i < bp->nsphincters; i++) + { + sphincter *s = &bp->sphincters[i]; + s->x += bp->dx; + s->y += bp->dy; + if (s->y > 1) + new_sphincter (mi, s, False); + + switch (s->state) { + case IDLE: + if (s->y > 0 && + s->finished >= s->nejecta && + ! (random() % 2000)) + { + s->state = OPENING; + s->ratio = 0; + } + break; + case OPENING: + { + double w = 0.9 - frand(0.1); + s->ratio += 0.01 * speed; + if (s->ratio > 1) + { + s->ratio = 0; + s->state = OPEN; + s->ejected = 0; + s->finished = 0; + for (j = 0; j < s->nejecta; j++) + { + ejecta *e = &s->ejecta[j]; + if (e->y < 0) /* if it's idle, enqueue it */ + { + int c = j * (double) bp->ncolors / s->nejecta; + e->w = w; + e->y = 0; + e->dy = EJECTA_SPEED; + e->countdown = (j + 1) * EJECTA_RATE; + + e->color[0] = bp->colors[c].red / 65536.0; + e->color[1] = bp->colors[c].green / 65536.0; + e->color[2] = bp->colors[c].blue / 65536.0; + e->color[3] = 1; + } + } + } + break; + } + case OPEN: + { + if (s->ejected >= s->nejecta) + { + s->ratio = 1; + s->state = CLOSING; + } + break; + } + case CLOSING: + { + s->ratio -= 0.03 * speed; + if (s->ratio < 0) + { + s->ratio = 0; + s->state = IDLE; + } + break; + } + default: abort(); + } + + for (j = 0; j < s->nejecta; j++) + { + ejecta *e = &s->ejecta[j]; + if (e->y < 0) continue; /* idle */ + if (e->countdown > 0) e->countdown--; + if (e->countdown == 0 && e->y == 0) + { + e->countdown = 0; + e->y = 0.001; + s->ejected++; + } + else if (e->countdown == 0) + { + e->y += e->dy; + e->dy -= 0.0008; + if (e->y < 0) + s->finished++; + } + } + } + + for (i = 0; i < NSTARS; i++) + { + star *s = &bp->stars[i]; + s->th += s->dth; + s->x += s->dx; + s->y += s->dy; + if (s->dy != 0) + s->dy -= 0.00001; + if (s->dx == 0 && + s->dy == 0 && + ! (random() % 8000)) + { + s->dx = frand(0.0004) - 0.0002; + s->dy = -frand(0.0004); + } + } + +} + + +ENTRYPOINT void +reshape_sq (ModeInfo *mi, int width, int height) +{ + GLfloat h = (GLfloat) height / (GLfloat) width; + int y = 0; + +# if 0 + if (width > height * 5) { /* tiny window: show middle */ + height = width * 9/16; + y = -height/2; + h = height / (GLfloat) width; + } +# endif + + glViewport (0, y, width, height); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + gluPerspective (40, 1/h, 10, 10000); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + gluLookAt( 0, 0, 30, + 0, 0, 0, + 0, 1, 0); + + glClear(GL_COLOR_BUFFER_BIT); +} + + +ENTRYPOINT Bool +sq_handle_event (ModeInfo *mi, XEvent *event) +{ + sq_configuration *bp = &bps[MI_SCREEN(mi)]; + + if (gltrackball_event_handler (event, bp->trackball, + MI_WIDTH (mi), MI_HEIGHT (mi), + &bp->button_down_p)) + return True; + return False; +} + + +static void +new_colors (ModeInfo *mi) +{ + sq_configuration *bp = &bps[MI_SCREEN(mi)]; + GLfloat h1, h2, h3; + if (bp->colors) free (bp->colors); + bp->ncolors = 128; + bp->colors = (XColor *) calloc(bp->ncolors, sizeof(XColor)); +# if 0 + make_smooth_colormap (0, 0, 0, + bp->colors, &bp->ncolors, + False, 0, False); +# else + h1 = frand(360); + h2 = h1 + 60 + frand(90); + h3 = h2 + 60 + frand(90); + make_color_loop(0, 0, 0, + h1, 0.5 + frand(0.5), 0.8 + frand(0.2), + h2, 0.5 + frand(0.5), 0.8 + frand(0.2), + h3, 0.5 + frand(0.5), 0.8 + frand(0.2), + bp->colors, &bp->ncolors, + False, False); +# endif +} + + +ENTRYPOINT void +init_sq (ModeInfo *mi) +{ + int wire = MI_IS_WIREFRAME(mi); + sq_configuration *bp; + spline *sp; + int spline_rez = 250; + int i; + + MI_INIT (mi, bps); + bp = &bps[MI_SCREEN(mi)]; + bp->glx_context = init_GL(mi); + + reshape_sq (mi, MI_WIDTH(mi), MI_HEIGHT(mi)); + + glShadeModel (GL_SMOOTH); + glEnable (GL_DEPTH_TEST); + glEnable (GL_NORMALIZE); + glEnable (GL_CULL_FACE); + + bp->trackball = gltrackball_init (False); + new_colors (mi); + + bp->dx = 0; + bp->dy = 0.0003 * speed; + bp->nsphincters = MI_COUNT(mi); + if (bp->nsphincters <= 0) bp->nsphincters = 1; + bp->sphincters = (sphincter *) calloc (bp->nsphincters, sizeof (sphincter)); + + for (i = 0; i < bp->nsphincters; i++) + { + sphincter *s = &bp->sphincters[i]; + new_sphincter (mi, s, True); + } + + parse_color (mi, "groundColor", bp->ground_color); + parse_color (mi, "holeColor", bp->hole_color); + parse_color (mi, "starColor", bp->star_color); + + bp->ejecta_dlist0 = glGenLists (SPHINCTER_FRAMES); + for (i = 0; i < SPHINCTER_FRAMES; i++) + { + glNewList (bp->ejecta_dlist0 + i, GL_COMPILE); + compute_unit_torus (mi, 0.1 * (i / (double) SPHINCTER_FRAMES), + 20, 60); + bp->ejecta_npolys = draw_torus (mi); + glEndList (); + } + + sp = make_sphincter_profile (spline_rez); + bp->sphincter_dlist0 = glGenLists (SPHINCTER_FRAMES); + for (i = 0; i < SPHINCTER_FRAMES; i++) + { + glNewList (bp->sphincter_dlist0 + i, GL_COMPILE); + bp->sphincter_npolys = render_sphincter (mi, sp, spline_rez, i); + glEndList (); + } + free_spline (sp); + + bp->ground_dlist = glGenLists (1); + glNewList (bp->ground_dlist, GL_COMPILE); + { + GLfloat step = 0.01; + GLfloat x, y; + GLfloat z = 0.001; + GLfloat inc = 0.02; + GLfloat black[4] = { 0, 0, 0, 1 }; + + glNormal3f (0, 0, -1); + glFrontFace (GL_CCW); + glBegin (wire ? GL_LINES : GL_QUADS); + /* When using fog, iOS apparently doesn't like lines or quads that are + really long, and extend very far outside of the scene. */ + for (y = -0.5; y < 0.5 + step; y += step) + for (x = -0.5; x < 0.5; x += step) + { + glVertex3f (x, y, z); + glVertex3f (x, y+step, z); + glVertex3f (x+step, y+step, z); + glVertex3f (x+step, y, z); + bp->ground_npolys++; + } + glEnd(); + + /* Mountains */ + step = 0.02; + y = -0.5; + glBegin (wire ? GL_LINE_STRIP : GL_QUAD_STRIP); + glNormal3f (0, 1, 0); + glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, black); + for (x = -0.5; x < 0.5 + step; x += step) + { + glVertex3f (x, y, -inc); + if (! wire) + glVertex3f (x, y, z); + inc += 0.015 * (frand(1.0) - 0.5); + if (inc < z) inc = z; + bp->ground_npolys++; + } + glEnd(); + } + glEndList (); + + bp->star_dlist = glGenLists (1); + glNewList (bp->star_dlist, GL_COMPILE); + { + GLfloat th; + int i; + GLfloat step = M_PI *2 / 10; + glNormal3f (0, 0, -1); + glFrontFace (GL_CCW); + glBegin (wire ? GL_LINE_LOOP : GL_TRIANGLE_FAN); + if (!wire) glVertex3f (0, 0, 0); + for (th = 0, i = 0; th < M_PI*2 + step; th += step, i++) + glVertex3f (cos (th) * (i & 1 ? 0.4 : 1), + sin (th) * (i & 1 ? 0.4 : 1), + 0); + bp->star_npolys += 10; + glEnd(); + } + glEndList (); + + for (i = 0; i < NSTARS; i++) + { + star *s = &bp->stars[i]; + s->x = frand (1.0) - 0.5; + s->y = frand (0.35) + 0.15; + s->th = frand (M_PI); + s->dth = 0.05 * frand(0.05) * ((random() & 1) ? 1 : -1); + } +} + + +ENTRYPOINT void +draw_sq (ModeInfo *mi) +{ + sq_configuration *bp = &bps[MI_SCREEN(mi)]; + int wire = MI_IS_WIREFRAME(mi); + Display *dpy = MI_DISPLAY(mi); + Window window = MI_WINDOW(mi); + int i, which; + + if (!bp->glx_context) + return; + + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + glShadeModel (GL_SMOOTH); + glEnable (GL_DEPTH_TEST); + glEnable (GL_NORMALIZE); + glEnable (GL_CULL_FACE); + glDisable (GL_BLEND); + + if (!wire) + { + GLfloat pos[4] = {0.4, 0.2, 0.4, 0.0}; + GLfloat amb[4] = {0.0, 0.0, 0.0, 1.0}; + GLfloat dif[4] = {1.0, 1.0, 1.0, 1.0}; + GLfloat spc[4] = {1.0, 0.2, 0.2, 1.0}; + GLfloat fog_color[4] = { 0, 0, 0, 1 }; + + static const GLfloat bspec[4] = {1.0, 1.0, 1.0, 1.0}; + static const GLfloat bshiny = 128.0; + + glEnable(GL_LIGHTING); + glEnable(GL_LIGHT0); + glLightfv(GL_LIGHT0, GL_POSITION, pos); + glLightfv(GL_LIGHT0, GL_AMBIENT, amb); + glLightfv(GL_LIGHT0, GL_DIFFUSE, dif); + glLightfv(GL_LIGHT0, GL_SPECULAR, spc); + + glMaterialfv (GL_FRONT, GL_SPECULAR, bspec); + glMateriali (GL_FRONT, GL_SHININESS, bshiny); + + + glFogi (GL_FOG_MODE, GL_LINEAR); + glFogfv (GL_FOG_COLOR, fog_color); + glFogf (GL_FOG_DENSITY, 0.0065); + glFogf (GL_FOG_START, 130); + glFogf (GL_FOG_END, 240); + glEnable (GL_FOG); + + glClearColor (0.05, 0.05, 0.06, 1); + } + + glPushMatrix (); + + glRotatef (current_device_rotation(), 0, 0, 1); /* right side up */ + + mi->polygon_count = 0; + + glScalef (200, 200, 200); + glRotatef (90, 1, 0, 0); + glTranslatef (0, -0.6, 0); + glRotatef (20, 1, 0, 0); + + glScalef (-1, 1, 1); + gltrackball_rotate (bp->trackball); + glScalef (-1, 1, 1); + +#if 0 + glScalef(0.2, 0.2, 0.2); +#endif + + + /* Draw the ejecta first so that they aren't masked by the ground. */ + for (which = 0; which <= 1; which++) + for (i = 0; i < bp->nsphincters; i++) + { + sphincter *s = &bp->sphincters[i]; + + if (s->y < 0) continue; + + glPushMatrix(); + glTranslatef (s->x, s->y - 0.5, 0); + glRotatef (180, 0, 1, 0); + glScalef (s->size, s->size, s->size); + + if (which == 1) /* sphincter */ + { + GLfloat sc = (s->state == IDLE ? 0 : + s->state == OPENING ? s->ratio : + s->state == CLOSING ? s->ratio : + 1); + int frame = sc * (SPHINCTER_FRAMES - 1); + + if (s->state == OPEN && + !bp->button_down_p && + s->ejected < s->nejecta * 0.95) + glScalef (1 + frand(0.03), /* Brrrrrrrtttt */ + 1 + frand(0.03), + 1 + frand(0.2)); + glCallList (bp->sphincter_dlist0 + frame); + } + else /* ejecta */ + { + int j; + glScalef (0.7, 0.7, 0.7); /* SPHINCTER_OPEN? */ + glTranslatef (0, 0, -0.3); + for (j = 0; j < s->nejecta; j++) + draw_ejecta (mi, &s->ejecta[j]); + } + + glPopMatrix(); + mi->polygon_count += bp->sphincter_npolys; + } + + /* Draw ground (must be after drawing the sphincters, for hole masking) */ + glColor4fv (bp->ground_color); + glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, bp->ground_color); + glPushMatrix(); + glScalef (2, 1, 1); + glCallList (bp->ground_dlist); + glPopMatrix(); + + glPopMatrix (); + + + /* Stars */ + glDisable (GL_LIGHTING); + glMatrixMode (GL_PROJECTION); + glPushMatrix (); + { + glLoadIdentity (); + + glMatrixMode (GL_MODELVIEW); + glPushMatrix (); + { + GLfloat h = MI_HEIGHT(mi) / (GLfloat) MI_WIDTH(mi); + GLfloat sc = 0.004; + glLoadIdentity (); + glOrtho (-0.5, 0.5, + -0.5, 0.5, + -100.0, 100.0); + glColor4fv (bp->star_color); + glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, bp->star_color); + for (i = 0; i < NSTARS; i++) + { + star *s = &bp->stars[i]; + if (s->y < -0.2) continue; + glPushMatrix(); + glTranslatef (s->x, s->y, -95); + glScalef (sc, sc / h, sc); + glRotatef (s->th / (M_PI / 180.0), 0, 0, 1); + glCallList (bp->star_dlist); + glPopMatrix(); + } + } + glPopMatrix (); + } + glMatrixMode (GL_PROJECTION); + glPopMatrix (); + glMatrixMode (GL_MODELVIEW); + + if (! bp->button_down_p) + move_sphincters (mi); + + if (! (random() % 300)) + new_colors (mi); + + if (mi->fps_p) do_fps (mi); + glFinish(); + + glXSwapBuffers(dpy, window); +} + + +ENTRYPOINT void +free_sq (ModeInfo *mi) +{ + sq_configuration *bp = &bps[MI_SCREEN(mi)]; + + if (!bp->glx_context) return; + glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *bp->glx_context); + + if (glIsList(bp->ground_dlist)) + glDeleteLists(bp->ground_dlist, 1); + if (glIsList(bp->star_dlist)) + glDeleteLists(bp->star_dlist, 1); + if (glIsList(bp->ejecta_dlist0)) + glDeleteLists(bp->ejecta_dlist0, SPHINCTER_FRAMES); + if (glIsList(bp->sphincter_dlist0)) + glDeleteLists(bp->sphincter_dlist0, SPHINCTER_FRAMES); + + if (bp->trackball) gltrackball_free (bp->trackball); + if (bp->sphincters) free (bp->sphincters); + if (bp->colors) free (bp->colors); + if (bp->torus_points) free (bp->torus_points); + if (bp->torus_normals) free (bp->torus_normals); +} + +XSCREENSAVER_MODULE_2 ("Squirtorus", squirtorus, sq) + +#endif /* USE_GL */ diff --git a/hacks/glx/squirtorus.man b/hacks/glx/squirtorus.man new file mode 100644 index 00000000..3ef1163e --- /dev/null +++ b/hacks/glx/squirtorus.man @@ -0,0 +1,61 @@ +.TH XScreenSaver 1 "" "X Version 11" +.SH NAME +squirtorus \- how rainbows are made. +.SH SYNOPSIS +.B squirtorus +[\-display \fIhost:display.screen\fP] +[\-visual \fIvisual\fP] +[\-window] +[\-root] +[\-delay \fInumber\fP] +[\-speed \fInumber\fP] +[\-count \fInumber\fP] +[\-fps] +.SH DESCRIPTION +A scrolling landscape vents toroidal rainbows into the sky. +Above, the stars are slowly going out. +.SH OPTIONS +.TP 8 +.B \-visual \fIvisual\fP +Specify which visual to use. Legal values are the name of a visual class, +or the id number (decimal or hex) of a specific visual. +.TP 8 +.B \-window +Draw on a newly-created window. This is the default. +.TP 8 +.B \-root +Draw on the root window. +.TP 8 +.B \-delay \fInumber\fP +Per-frame delay, in microseconds. Default: 30000 (0.03 seconds). +.TP 8 +.B \-speed \fInumber\fP +Scrolling speed. 2.0 means twice as fast, 0.5 means half as fast. +.TP 8 +.B \-count \fInumber\fP +Count. 1 - 50. Default: 12. +.TP 8 +.B \-fps | \-no-fps +Whether to show a frames-per-second display at the bottom of the screen. +.SH ENVIRONMENT +.PP +.TP 8 +.B DISPLAY +to get the default host and display number. +.TP 8 +.B XENVIRONMENT +to get the name of a resource file that overrides the global resources +stored in the RESOURCE_MANAGER property. +.SH SEE ALSO +.BR X (1), +.BR xscreensaver (1) +.SH COPYRIGHT +Copyright \(co 2022 by Jamie Zawinski. 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. No representations are made about the +suitability of this software for any purpose. It is provided "as is" without +express or implied warranty. +.SH AUTHOR +Jamie Zawinski. diff --git a/hacks/glx/texfont.c b/hacks/glx/texfont.c index d5951dcc..072c1724 100644 --- a/hacks/glx/texfont.c +++ b/hacks/glx/texfont.c @@ -1,4 +1,4 @@ -/* texfont, Copyright © 2005-2021 Jamie Zawinski +/* texfont, Copyright © 2005-2022 Jamie Zawinski * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that @@ -115,6 +115,7 @@ struct texture_font_data { XftFont *xftfont; int cache_size; texfont_cache *cache; + Bool dropshadow_p; # ifdef HAVE_GLSL Bool shaders_initialized, use_shaders; GLuint shader_program; @@ -377,6 +378,8 @@ load_texture_font (Display *dpy, char *res) data->dpy = dpy; data->xftfont = f; data->cache_size = cache_size; + data->dropshadow_p = + !get_boolean_resource (dpy, "texFontOmitDropShadow", "Boolean"); #ifdef HAVE_GLSL /* Setting data->shaders_initialized to False will cause @@ -1320,12 +1323,13 @@ print_texture_label (Display *dpy, # ifdef HAVE_GLSL if (data->use_shaders) - glUniform4f (data->font_color_index, 0, 0, 0, 1); + glUniform4f (data->font_color_index, 0, 0, 0, color[3]); else # endif /* HAVE_GLSL */ - glColor3f (0, 0, 0); + glColor4f (0, 0, 0, color[3]); - for (i = 0; i < countof(offsets); i++) + for (i = (data->dropshadow_p ? 0 : countof(offsets)-1); + i < countof(offsets); i++) { if (offsets[i].x == 0) { diff --git a/hacks/glx/timezones.c b/hacks/glx/timezones.c new file mode 100644 index 00000000..4af4c718 --- /dev/null +++ b/hacks/glx/timezones.c @@ -0,0 +1,3982 @@ +/* Generated from "timezones.dxf" on 25-Feb-2022. + Drawn by hand by jwz. + */ + +#include "gllist.h" + +static const float timezones_data[] = { + 0.062141,0.498384,0, + 0.062141,0.4473,0, + 0.062141,0.4473,0, + 0.047726,0.444361,0, + 0.047726,0.444361,0, + 0.029952,0.437363,0, + 0.062141,0.4473,0, + 0.104128,0.444361,0, + 0.104128,0.444361,0, + 0.104128,0.498384,0, + 0.145416,0.498384,0, + 0.145416,0.444361,0, + 0.145416,0.444361,0, + 0.153113,0.453318,0, + 0.153113,0.453318,0, + 0.152273,0.454858,0, + 0.152273,0.454858,0, + 0.158432,0.461156,0, + 0.158432,0.461156,0, + 0.171307,0.464234,0, + 0.171307,0.464234,0, + 0.175506,0.464234,0, + 0.175506,0.464234,0, + 0.183624,0.467034,0, + 0.183624,0.467034,0, + 0.187262,0.467034,0, + 0.187262,0.467034,0, + 0.187262,0.498384,0, + 0.22855,0.498384,0, + 0.22855,0.472632,0, + 0.22855,0.472632,0, + 0.216373,0.472632,0, + 0.216373,0.472632,0, + 0.216373,0.452478,0, + 0.216373,0.452478,0, + 0.235827,0.450099,0, + 0.235827,0.450099,0, + 0.239606,0.44884,0, + 0.239606,0.44884,0, + 0.248423,0.442122,0, + 0.248423,0.442122,0, + 0.251362,0.442122,0, + 0.251362,0.442122,0, + 0.252762,0.440722,0, + 0.252762,0.440722,0, + 0.252762,0.434564,0, + 0.252762,0.434564,0, + 0.216373,0.434564,0, + 0.216373,0.434564,0, + 0.216373,0.41525,0, + 0.216373,0.41525,0, + 0.19398,0.41525,0, + 0.19398,0.41525,0, + 0.19398,0.38502,0, + 0.19398,0.38502,0, + 0.210635,0.38502,0, + 0.270536,0.47935,0, + 0.270536,0.498384,0, + 0.270536,0.47935,0, + 0.263398,0.47935,0, + 0.263398,0.47935,0, + 0.263398,0.432744,0, + 0.263398,0.432744,0, + 0.26018,0.431625,0, + 0.26018,0.431625,0, + 0.25906,0.428686,0, + 0.25906,0.428686,0, + 0.256541,0.425607,0, + 0.256541,0.425607,0, + 0.256541,0.424067,0, + 0.256541,0.424067,0, + 0.25962,0.421828,0, + 0.25962,0.421828,0, + 0.263398,0.420289,0, + 0.263398,0.420289,0, + 0.263398,0.402514,0, + 0.263398,0.402514,0, + 0.256541,0.404053,0, + 0.256541,0.404053,0, + 0.252762,0.406573,0, + 0.252762,0.406573,0, + 0.250523,0.405313,0, + 0.311823,0.498384,0, + 0.311823,0.47935,0, + 0.311823,0.47935,0, + 0.323159,0.47935,0, + 0.323159,0.47935,0, + 0.333517,0.476971,0, + 0.107907,0.442401,0, + 0.107907,0.41581,0, + 0.109027,0.41581,0, + 0.114065,0.41651,0, + 0.114065,0.41651,0, + 0.117984,0.412591,0, + 0.117984,0.412591,0, + 0.119943,0.412591,0, + 0.119943,0.412591,0, + 0.122883,0.41455,0, + 0.122883,0.41455,0, + 0.124282,0.41455,0, + 0.124282,0.41455,0, + 0.131,0.409652,0, + 0.131,0.409652,0, + 0.134639,0.405593,0, + 0.134639,0.405593,0, + 0.139397,0.404053,0, + 0.139397,0.404053,0, + 0.139397,0.401394,0, + 0.139397,0.401394,0, + 0.135759,0.399995,0, + 0.135759,0.399995,0, + 0.131,0.399995,0, + 0.131,0.399995,0, + 0.129461,0.398035,0, + 0.129461,0.398035,0, + 0.13282,0.394536,0, + 0.13282,0.394536,0, + 0.145416,0.387679,0, + 0.107907,0.442401,0, + 0.114065,0.442401,0, + 0.114065,0.442401,0, + 0.117984,0.440302,0, + 0.117984,0.440302,0, + 0.121413,0.440302,0, + 0.121413,0.440302,0, + 0.121413,0.434704,0, + 0.121413,0.434704,0, + 0.127641,0.434704,0, + 0.127641,0.434704,0, + 0.129461,0.431905,0, + 0.129461,0.431905,0, + 0.132259,0.431905,0, + 0.132259,0.431905,0, + 0.132259,0.429106,0, + 0.132259,0.429106,0, + 0.134639,0.427566,0, + 0.134639,0.427566,0, + 0.137018,0.427566,0, + 0.137018,0.427566,0, + 0.141777,0.421408,0, + 0.141777,0.421408,0, + 0.145416,0.419309,0, + 0.145416,0.419309,0, + 0.147515,0.419309,0, + 0.147515,0.419309,0, + 0.147515,0.417629,0, + 0.147515,0.417629,0, + 0.154093,0.417629,0, + 0.154093,0.417629,0, + 0.156192,0.41455,0, + 0.156192,0.41455,0, + 0.166689,0.41455,0, + 0.166689,0.41455,0, + 0.166689,0.408392,0, + 0.166689,0.408392,0, + 0.160531,0.406712,0, + 0.160531,0.406712,0, + 0.156192,0.407622,0, + 0.156192,0.407622,0, + 0.155142,0.407168,0, + 0.155142,0.407168,0, + 0.156192,0.404053,0, + 0.156192,0.404053,0, + 0.16144,0.399995,0, + 0.16144,0.399995,0, + 0.167669,0.399015,0, + 0.167669,0.399015,0, + 0.171447,0.395376,0, + 0.171447,0.395376,0, + 0.170748,0.392857,0, + 0.170748,0.392857,0, + 0.176346,0.389638,0, + 0.176346,0.389638,0, + 0.176346,0.387679,0, + 0.176346,0.387679,0, + 0.175506,0.386419,0, + 0.175506,0.386419,0, + 0.176346,0.384739,0, + 0.176346,0.384739,0, + 0.177885,0.384739,0, + 0.177885,0.384739,0, + 0.177885,0.381381,0, + 0.029952,0.387679,0, + 0.062002,0.387679,0, + 0.062002,0.387679,0, + 0.062002,0.322599,0, + 0.062002,0.322599,0, + 0.029952,0.322599,0, + 0.029952,0.28915,0, + 0.03457,0.28915,0, + 0.03457,0.28915,0, + 0.03457,0.242264,0, + 0.029952,0.242264,0, + 0.03457,0.242264,0, + 0.059062,0.242264,0, + 0.059062,0.252341,0, + 0.059062,0.252341,0, + 0.052904,0.252341,0, + 0.052904,0.252341,0, + 0.052904,0.25724,0, + 0.052904,0.25724,0, + 0.070399,0.25724,0, + 0.070399,0.25724,0, + 0.084814,0.22477,0, + 0.084814,0.22477,0, + 0.084814,0.220151,0, + 0.084814,0.220151,0, + 0.070399,0.220151,0, + 0.070399,0.220151,0, + 0.070399,0.226169,0, + 0.070399,0.226169,0, + 0.038209,0.226169,0, + 0.038209,0.226169,0, + 0.038209,0.217492,0, + 0.038209,0.217492,0, + 0.03408,0.217492,0, + 0.03408,0.217492,0, + 0.03408,0.186142,0, + 0.03408,0.186142,0, + 0.062282,0.186142,0, + 0.062282,0.186142,0, + 0.062282,0,0, + 0.103289,0,0, + 0.103289,0.183342,0, + 0.145275,0,0, + 0.145275,0.177185,0, + 0.186703,0,0, + 0.186703,0.315741,0, + 0.228129,0,0, + 0.228129,0.156191,0, + 0.228129,0.156191,0, + 0.191461,0.156191,0, + 0.191461,0.156191,0, + 0.191461,0.188101,0, + 0.191461,0.188101,0, + 0.228129,0.188101,0, + 0.134079,0.186142,0, + 0.16347,0.186142,0, + 0.16347,0.186142,0, + 0.16347,0.177185,0, + 0.16347,0.177185,0, + 0.145275,0.177185,0, + 0.134079,0.177185,0, + 0.134079,0.186142,0, + 0.269837,0,0, + 0.269837,0.299646,0, + 0.311264,0,0, + 0.311264,0.093071,0, + 0.353251,0,0, + 0.353251,0.157591,0, + 0.394957,0,0, + 0.394957,0.097129,0, + 0.394957,0.097129,0, + 0.374244,0.097129,0, + 0.374244,0.097129,0, + 0.374244,0.104407,0, + 0.374244,0.104407,0, + 0.394957,0.104407,0, + 0.394957,0.104407,0, + 0.394957,0.215252,0, + 0.436385,0,0, + 0.436385,0.285931,0, + 0.478092,0,0, + 0.478092,0.133798,0, + 0.478092,0.133798,0, + 0.458778,0.133798,0, + 0.458778,0.133798,0, + 0.458778,0.150593,0, + 0.458778,0.150593,0, + 0.478092,0.150593,0, + 0.478092,0.150593,0, + 0.478092,0.22281,0, + 0.478092,0.22281,0, + 0.454579,0.22281,0, + 0.454579,0.22281,0, + 0.454579,0.232084,0, + 0.454579,0.232084,0, + 0.478092,0.232084,0, + 0.478092,0.232084,0, + 0.478092,0.260879,0, + 0.519519,0,0, + 0.519519,0.238205,0, + 0.561225,0,0, + 0.561225,0.155071,0, + 0.602932,0,0, + 0.602932,0.200138,0, + 0.644639,0,0, + 0.644639,0.278093,0, + 0.686346,0,0, + 0.686346,0.270325,0, + 0.694184,0.229808,0, + 0.702861,0.229808,0, + 0.702861,0.229808,0, + 0.702861,0.22281,0, + 0.702861,0.22281,0, + 0.694184,0.22281,0, + 0.694184,0.22281,0, + 0.694184,0.229808,0, + 0.728053,0,0, + 0.728053,0.294608,0, + 0.76948,0,0, + 0.76948,0.210214,0, + 0.76948,0.217492,0, + 0.759123,0.217492,0, + 0.759123,0.217492,0, + 0.759123,0.210214,0, + 0.759123,0.210214,0, + 0.76948,0.210214,0, + 0.810907,0,0, + 0.810907,0.22281,0, + 0.810907,0.22281,0, + 0.820984,0.22281,0, + 0.820984,0.22281,0, + 0.820984,0.228409,0, + 0.852894,0,0, + 0.852894,0.15983,0, + 0.894321,0,0, + 0.894321,0.143035,0, + 0.935748,0,0, + 0.935748,0.22421,0, + 0.977735,0,0, + 0.977735,0.098529,0, + 0.977735,0.098529,0, + 0.957581,0.098529,0, + 0.957581,0.098529,0, + 0.957581,0.12792,0, + 0.957581,0.12792,0, + 0.977735,0.15983,0, + 0.977735,0.15983,0, + 0.977735,0.163469,0, + 0.938126,0.164869,0, + 0.957581,0.164869,0, + 0.957581,0.164869,0, + 0.957581,0.155911,0, + 0.957581,0.155911,0, + 0.938126,0.155911,0, + 0.938126,0.155911,0, + 0.938126,0.164869,0, + 0.977735,0.171866,0, + 0.96066,0.171866,0, + 0.96066,0.171866,0, + 0.96066,0.163469,0, + 0.96066,0.163469,0, + 0.977735,0.163469,0, + 1,0.1296,0, + 0.99285,0.1296,0, + 0.99285,0.1296,0, + 0.988092,0.124281,0, + 0.988092,0.124281,0, + 0.988092,0.119802,0, + 0.988092,0.119802,0, + 1,0.119802,0, + 0.103289,0.183342,0, + 0.119523,0.183342,0, + 0.119523,0.183342,0, + 0.127081,0.189781,0, + 0.127081,0.189781,0, + 0.127081,0.211894,0, + 0.127081,0.211894,0, + 0.103289,0.211894,0, + 0.103289,0.211894,0, + 0.103289,0.387679,0, + 0.106647,0.228968,0, + 0.123302,0.228968,0, + 0.123302,0.228968,0, + 0.123302,0.217492,0, + 0.123302,0.217492,0, + 0.106647,0.217492,0, + 0.106647,0.217492,0, + 0.106647,0.228968,0, + 0.145275,0.186561,0, + 0.145275,0.387679,0, + 0.177885,0.381381,0, + 0.181664,0.378441,0, + 0.181664,0.378441,0, + 0.181664,0.374803,0, + 0.181664,0.374803,0, + 0.175926,0.374803,0, + 0.175926,0.374803,0, + 0.173547,0.371724,0, + 0.173547,0.371724,0, + 0.171447,0.371724,0, + 0.171447,0.371724,0, + 0.171447,0.366685,0, + 0.171447,0.366685,0, + 0.175506,0.366685,0, + 0.175506,0.366685,0, + 0.183343,0.365286,0, + 0.183343,0.365286,0, + 0.183343,0.348491,0, + 0.183343,0.348491,0, + 0.181664,0.348491,0, + 0.181664,0.348491,0, + 0.182503,0.343453,0, + 0.182503,0.343453,0, + 0.181664,0.338134,0, + 0.181664,0.338134,0, + 0.188662,0.326098,0, + 0.188662,0.326098,0, + 0.174736,0.326098,0, + 0.174736,0.326098,0, + 0.174736,0.315741,0, + 0.174736,0.315741,0, + 0.186703,0.315741,0, + 0.145416,0.444361,0, + 0.13282,0.442401,0, + 0.13282,0.442401,0, + 0.125961,0.441422,0, + 0.125961,0.441422,0, + 0.121413,0.440302,0, + 0.210635,0.38502,0, + 0.210635,0.38222,0, + 0.210635,0.38222,0, + 0.211755,0.381381,0, + 0.211755,0.381381,0, + 0.218333,0.381381,0, + 0.218333,0.381381,0, + 0.220712,0.378441,0, + 0.220712,0.378441,0, + 0.221552,0.373263,0, + 0.221552,0.373263,0, + 0.220712,0.370044,0, + 0.220712,0.370044,0, + 0.221552,0.367945,0, + 0.221552,0.367945,0, + 0.218333,0.364166,0, + 0.218333,0.364166,0, + 0.218333,0.359967,0, + 0.218333,0.359967,0, + 0.215813,0.359967,0, + 0.215813,0.359967,0, + 0.215813,0.358568,0, + 0.215813,0.358568,0, + 0.218333,0.358568,0, + 0.218333,0.358568,0, + 0.218333,0.353529,0, + 0.218333,0.353529,0, + 0.215813,0.353529,0, + 0.215813,0.353529,0, + 0.215813,0.35157,0, + 0.215813,0.35157,0, + 0.213854,0.35157,0, + 0.213854,0.35157,0, + 0.213854,0.338134,0, + 0.213854,0.338134,0, + 0.208116,0.338134,0, + 0.208116,0.338134,0, + 0.208116,0.333655,0, + 0.208116,0.333655,0, + 0.204057,0.336735,0, + 0.204057,0.336735,0, + 0.199299,0.336735,0, + 0.199299,0.336735,0, + 0.199299,0.335895,0, + 0.199299,0.335895,0, + 0.197479,0.335895,0, + 0.197479,0.335895,0, + 0.198389,0.332116,0, + 0.198389,0.332116,0, + 0.198389,0.327498,0, + 0.198389,0.327498,0, + 0.19664,0.327498,0, + 0.19664,0.327498,0, + 0.198389,0.323719,0, + 0.198389,0.323719,0, + 0.200978,0.323719,0, + 0.200978,0.323719,0, + 0.202938,0.317561,0, + 0.202938,0.317561,0, + 0.206087,0.315741,0, + 0.206087,0.315741,0, + 0.206087,0.313642,0, + 0.206087,0.313642,0, + 0.210635,0.310982,0, + 0.210635,0.310982,0, + 0.210985,0.307623,0, + 0.210985,0.307623,0, + 0.209656,0.306224,0, + 0.209656,0.306224,0, + 0.208116,0.307623,0, + 0.208116,0.307623,0, + 0.206087,0.304825,0, + 0.206087,0.304825,0, + 0.208885,0.301745,0, + 0.208116,0.301745,0, + 0.211755,0.300906,0, + 0.211755,0.300906,0, + 0.216373,0.298386,0, + 0.216373,0.298386,0, + 0.222252,0.296147,0, + 0.222252,0.296147,0, + 0.225191,0.294468,0, + 0.225191,0.294468,0, + 0.228129,0.293068,0, + 0.228129,0.293068,0, + 0.228129,0.188101,0, + 0.250523,0.405313,0, + 0.250523,0.381381,0, + 0.250523,0.381381,0, + 0.248563,0.378441,0, + 0.248563,0.378441,0, + 0.249543,0.376622,0, + 0.249543,0.376622,0, + 0.253462,0.376622,0, + 0.253462,0.376622,0, + 0.255421,0.375852,0, + 0.255421,0.375852,0, + 0.256541,0.373263,0, + 0.256541,0.373263,0, + 0.259969,0.374803,0, + 0.259969,0.374803,0, + 0.259969,0.374033,0, + 0.259969,0.374033,0, + 0.258255,0.371653,0, + 0.258255,0.371653,0, + 0.258255,0.365286,0, + 0.258255,0.365286,0, + 0.259969,0.364166,0, + 0.259969,0.364166,0, + 0.258255,0.361227,0, + 0.258255,0.361227,0, + 0.256541,0.361227,0, + 0.256541,0.361227,0, + 0.256541,0.355349,0, + 0.256541,0.355349,0, + 0.260879,0.352549,0, + 0.260879,0.352549,0, + 0.264518,0.35157,0, + 0.264518,0.35157,0, + 0.264518,0.348491,0, + 0.264518,0.348491,0, + 0.262139,0.344852,0, + 0.262139,0.344852,0, + 0.264518,0.338134,0, + 0.264518,0.338134,0, + 0.264518,0.331276,0, + 0.264518,0.331276,0, + 0.267457,0.332116,0, + 0.267457,0.332116,0, + 0.269837,0.328757,0, + 0.269837,0.328757,0, + 0.269837,0.315741,0, + 0.269837,0.315741,0, + 0.260879,0.315741,0, + 0.260879,0.315741,0, + 0.260879,0.299646,0, + 0.260879,0.299646,0, + 0.269837,0.299646,0, + 0.333517,0.476971,0, + 0.328898,0.475711,0, + 0.328898,0.475711,0, + 0.328898,0.473891,0, + 0.328898,0.473891,0, + 0.327498,0.473891,0, + 0.327498,0.473891,0, + 0.322321,0.473891,0, + 0.322321,0.473891,0, + 0.311823,0.472632,0, + 0.311823,0.472632,0, + 0.311823,0.470952,0, + 0.311823,0.470952,0, + 0.318821,0.470952,0, + 0.318821,0.470952,0, + 0.318821,0.469273,0, + 0.318821,0.469273,0, + 0.311823,0.468433,0, + 0.311823,0.468433,0, + 0.298248,0.467034,0, + 0.298248,0.467034,0, + 0.298248,0.463395,0, + 0.298248,0.463395,0, + 0.310424,0.459616,0, + 0.310424,0.459616,0, + 0.310424,0.444501,0, + 0.310424,0.444501,0, + 0.315322,0.440722,0, + 0.315322,0.440722,0, + 0.315322,0.439042,0, + 0.315322,0.439042,0, + 0.323159,0.437643,0, + 0.323159,0.437643,0, + 0.327498,0.435544,0, + 0.327498,0.435544,0, + 0.330158,0.434564,0, + 0.330158,0.434564,0, + 0.330158,0.432744,0, + 0.330158,0.432744,0, + 0.325959,0.430155,0, + 0.325959,0.430155,0, + 0.323159,0.428126,0, + 0.323159,0.428126,0, + 0.322321,0.422948,0, + 0.322321,0.422948,0, + 0.320081,0.419169,0, + 0.320081,0.419169,0, + 0.3212,0.41525,0, + 0.3212,0.41525,0, + 0.31924,0.41525,0, + 0.320081,0.41595,0, + 0.320641,0.412311,0, + 0.320641,0.412311,0, + 0.322321,0.411401,0, + 0.322321,0.411401,0, + 0.3212,0.409932,0, + 0.3212,0.409932,0, + 0.32274,0.408532,0, + 0.32274,0.408532,0, + 0.320641,0.405313,0, + 0.320641,0.405313,0, + 0.321691,0.404053,0, + 0.321691,0.404053,0, + 0.324559,0.402514,0, + 0.324559,0.402514,0, + 0.32274,0.400135,0, + 0.32274,0.400135,0, + 0.317491,0.401324,0, + 0.317491,0.401324,0, + 0.314343,0.402514,0, + 0.314343,0.402514,0, + 0.311823,0.398735,0, + 0.311823,0.398735,0, + 0.314343,0.396636,0, + 0.314343,0.396636,0, + 0.314343,0.394816,0, + 0.314343,0.394816,0, + 0.315918,0.395726,0, + 0.315918,0.395726,0, + 0.315918,0.393347,0, + 0.315918,0.393347,0, + 0.320081,0.393347,0, + 0.320081,0.393347,0, + 0.321166,0.392017,0, + 0.321166,0.392017,0, + 0.322321,0.395726,0, + 0.322321,0.395726,0, + 0.32274,0.393347,0, + 0.32274,0.393347,0, + 0.324559,0.393347,0, + 0.324559,0.393347,0, + 0.324559,0.38306,0, + 0.324559,0.38306,0, + 0.320641,0.38306,0, + 0.335056,0.379911,0, + 0.334636,0.38418,0, + 0.334636,0.38418,0, + 0.336735,0.38502,0, + 0.336735,0.38502,0, + 0.341494,0.390898,0, + 0.341494,0.390898,0, + 0.341494,0.396636,0, + 0.341494,0.396636,0, + 0.344713,0.396636,0, + 0.344713,0.396636,0, + 0.346113,0.392682,0, + 0.346113,0.392682,0, + 0.346113,0.386419,0, + 0.346113,0.386419,0, + 0.350452,0.386419,0, + 0.350452,0.386419,0, + 0.35395,0.381381,0, + 0.35395,0.381381,0, + 0.352831,0.377532,0, + 0.352831,0.377532,0, + 0.348282,0.378441,0, + 0.348282,0.378441,0, + 0.348282,0.379911,0, + 0.348282,0.379911,0, + 0.346673,0.379911,0, + 0.346673,0.379911,0, + 0.344013,0.377532,0, + 0.344013,0.377532,0, + 0.342194,0.377532,0, + 0.342194,0.377532,0, + 0.341494,0.381381,0, + 0.341494,0.381381,0, + 0.338415,0.381381,0, + 0.338415,0.381381,0, + 0.335056,0.379911,0, + 0.320641,0.38306,0, + 0.310984,0.382045,0, + 0.310984,0.382045,0, + 0.308325,0.379911,0, + 0.308325,0.379911,0, + 0.311823,0.379176,0, + 0.311823,0.379176,0, + 0.311823,0.375852,0, + 0.311823,0.375852,0, + 0.315322,0.373263,0, + 0.315322,0.373263,0, + 0.311823,0.371653,0, + 0.311823,0.371653,0, + 0.311823,0.304825,0, + 0.311823,0.304825,0, + 0.300207,0.304825,0, + 0.300207,0.304825,0, + 0.300207,0.283691,0, + 0.300207,0.283691,0, + 0.302167,0.283691,0, + 0.302167,0.283691,0, + 0.302167,0.281732,0, + 0.302167,0.281732,0, + 0.299367,0.281732,0, + 0.299367,0.281732,0, + 0.297128,0.278093,0, + 0.297128,0.278093,0, + 0.295309,0.273474,0, + 0.295309,0.273474,0, + 0.298248,0.273474,0, + 0.298248,0.273474,0, + 0.299367,0.271095,0, + 0.299367,0.271095,0, + 0.298248,0.269556,0, + 0.298248,0.269556,0, + 0.300207,0.268016,0, + 0.300207,0.268016,0, + 0.304825,0.268786,0, + 0.304825,0.268786,0, + 0.306785,0.266056,0, + 0.306785,0.266056,0, + 0.312803,0.266056,0, + 0.312803,0.266056,0, + 0.311123,0.262138,0, + 0.311123,0.262138,0, + 0.312803,0.258359,0, + 0.312803,0.258359,0, + 0.311123,0.25682,0, + 0.311123,0.25682,0, + 0.312803,0.25542,0, + 0.312803,0.25542,0, + 0.312803,0.25416,0, + 0.312803,0.25416,0, + 0.311123,0.253321,0, + 0.311123,0.253321,0, + 0.305805,0.25416,0, + 0.305805,0.25416,0, + 0.305805,0.252201,0, + 0.305805,0.252201,0, + 0.307765,0.251641,0, + 0.307765,0.251641,0, + 0.307765,0.250522,0, + 0.307765,0.250522,0, + 0.304825,0.250522,0, + 0.304825,0.250522,0, + 0.304825,0.248003,0, + 0.304825,0.248003,0, + 0.307765,0.245483,0, + 0.307765,0.245483,0, + 0.304825,0.236946,0, + 0.304825,0.236946,0, + 0.299228,0.236106,0, + 0.299228,0.236106,0, + 0.297128,0.234287,0, + 0.297128,0.234287,0, + 0.296218,0.230788,0, + 0.296218,0.230788,0, + 0.294749,0.229388,0, + 0.294749,0.229388,0, + 0.294749,0.228689,0, + 0.294749,0.228689,0, + 0.298808,0.227149,0, + 0.298808,0.227149,0, + 0.304825,0.226309,0, + 0.304825,0.226309,0, + 0.314902,0.221271,0, + 0.314902,0.221271,0, + 0.309864,0.218612,0, + 0.309864,0.218612,0, + 0.306295,0.218052,0, + 0.306295,0.218052,0, + 0.308465,0.213853,0, + 0.308465,0.213853,0, + 0.308465,0.209234,0, + 0.308465,0.209234,0, + 0.30738,0.208115,0, + 0.30738,0.208115,0, + 0.306785,0.205036,0, + 0.306785,0.205036,0, + 0.308465,0.203636,0, + 0.308465,0.203636,0, + 0.305805,0.200557,0, + 0.305805,0.200557,0, + 0.305805,0.198598,0, + 0.305805,0.198598,0, + 0.304825,0.197898,0, + 0.304825,0.197898,0, + 0.305316,0.19272,0, + 0.305316,0.19272,0, + 0.305071,0.186282,0, + 0.305071,0.186282,0, + 0.303426,0.180124,0, + 0.303426,0.180124,0, + 0.271516,0.180124,0, + 0.271516,0.180124,0, + 0.271516,0.145275,0, + 0.271516,0.145275,0, + 0.295449,0.145275,0, + 0.295449,0.145275,0, + 0.296148,0.140656,0, + 0.296148,0.140656,0, + 0.296148,0.137857,0, + 0.296148,0.137857,0, + 0.294049,0.134918,0, + 0.294049,0.134918,0, + 0.294049,0.132958,0, + 0.294049,0.132958,0, + 0.292789,0.128759,0, + 0.292789,0.128759,0, + 0.29125,0.128759,0, + 0.29125,0.128759,0, + 0.29125,0.121202,0, + 0.29125,0.121202,0, + 0.28985,0.119802,0, + 0.28985,0.119802,0, + 0.28929,0.107766,0, + 0.28929,0.107766,0, + 0.29125,0.104407,0, + 0.29125,0.104407,0, + 0.296709,0.097129,0, + 0.296709,0.097129,0, + 0.301467,0.097129,0, + 0.301467,0.097129,0, + 0.304825,0.09503,0, + 0.304825,0.09503,0, + 0.310004,0.09419,0, + 0.310004,0.09419,0, + 0.311264,0.093071,0, + 0.308465,0.09671,0, + 0.319521,0.09608,0, + 0.319521,0.09608,0, + 0.32302,0.09769,0, + 0.32302,0.09769,0, + 0.315602,0.09769,0, + 0.315602,0.09769,0, + 0.312243,0.099509,0, + 0.312243,0.099509,0, + 0.312243,0.113784,0, + 0.312243,0.113784,0, + 0.317841,0.116164,0, + 0.317841,0.116164,0, + 0.317841,0.118263,0, + 0.317841,0.118263,0, + 0.313922,0.118263,0, + 0.313922,0.118263,0, + 0.312243,0.119802,0, + 0.312243,0.119802,0, + 0.312243,0.122322,0, + 0.312243,0.122322,0, + 0.317841,0.124981,0, + 0.317841,0.124981,0, + 0.318681,0.128759,0, + 0.318681,0.128759,0, + 0.32302,0.130019,0, + 0.32302,0.130019,0, + 0.32246,0.132259,0, + 0.32246,0.132259,0, + 0.319311,0.132259,0, + 0.319311,0.132259,0, + 0.319311,0.134918,0, + 0.319311,0.134918,0, + 0.319521,0.135618,0, + 0.319521,0.135618,0, + 0.323999,0.134918,0, + 0.323999,0.134918,0, + 0.327639,0.135618,0, + 0.327639,0.135618,0, + 0.327639,0.137857,0, + 0.327639,0.137857,0, + 0.328338,0.140656,0, + 0.328338,0.140656,0, + 0.335196,0.141776,0, + 0.335196,0.141776,0, + 0.338835,0.142965,0, + 0.338835,0.142965,0, + 0.342893,0.147094,0, + 0.342893,0.147094,0, + 0.342893,0.148214,0, + 0.342893,0.148214,0, + 0.340864,0.148214,0, + 0.340864,0.148214,0, + 0.340864,0.149193,0, + 0.340864,0.149193,0, + 0.341879,0.150733,0, + 0.341879,0.150733,0, + 0.337016,0.152692,0, + 0.337016,0.152692,0, + 0.338135,0.154092,0, + 0.338135,0.154092,0, + 0.343453,0.151713,0, + 0.343453,0.151713,0, + 0.349191,0.151713,0, + 0.349191,0.151713,0, + 0.351711,0.155212,0, + 0.351711,0.155212,0, + 0.353251,0.157591,0, + 0.308465,0.09671,0, + 0.308465,0.104407,0, + 0.308465,0.104407,0, + 0.305805,0.104967,0, + 0.305805,0.104967,0, + 0.299088,0.104967,0, + 0.299088,0.104967,0, + 0.299088,0.107766,0, + 0.299088,0.107766,0, + 0.296709,0.107766,0, + 0.296709,0.107766,0, + 0.295449,0.110006,0, + 0.295449,0.110006,0, + 0.295449,0.112105,0, + 0.295449,0.112105,0, + 0.297898,0.113784,0, + 0.297898,0.113784,0, + 0.299088,0.114974,0, + 0.299088,0.114974,0, + 0.298493,0.116164,0, + 0.298493,0.116164,0, + 0.301467,0.119802,0, + 0.301467,0.119802,0, + 0.29998,0.122322,0, + 0.29998,0.122322,0, + 0.301467,0.123651,0, + 0.301467,0.123651,0, + 0.29998,0.124981,0, + 0.29998,0.124316,0, + 0.301467,0.1261,0, + 0.301467,0.1261,0, + 0.29998,0.12778,0, + 0.29998,0.12778,0, + 0.299088,0.131139,0, + 0.299088,0.131139,0, + 0.29998,0.132958,0, + 0.29998,0.132958,0, + 0.29998,0.136737,0, + 0.29998,0.136737,0, + 0.301467,0.141776,0, + 0.301467,0.141776,0, + 0.302446,0.141776,0, + 0.302446,0.141776,0, + 0.302446,0.147654,0, + 0.302446,0.147654,0, + 0.304248,0.149193,0, + 0.304248,0.149193,0, + 0.303426,0.151713,0, + 0.303426,0.151713,0, + 0.305805,0.154092,0, + 0.305805,0.154092,0, + 0.305805,0.156401,0, + 0.305805,0.156401,0, + 0.303348,0.162699,0, + 0.303348,0.162699,0, + 0.305316,0.164869,0, + 0.305316,0.164869,0, + 0.305071,0.167528,0, + 0.305071,0.167528,0, + 0.308465,0.173406,0, + 0.308465,0.173406,0, + 0.310004,0.173406,0, + 0.310004,0.173406,0, + 0.309234,0.176065,0, + 0.309234,0.176065,0, + 0.30962,0.181103,0, + 0.30962,0.181103,0, + 0.313083,0.182503,0, + 0.313083,0.182503,0, + 0.313083,0.186282,0, + 0.313083,0.186282,0, + 0.315881,0.188801,0, + 0.315881,0.188801,0, + 0.317841,0.188101,0, + 0.317841,0.188101,0, + 0.320851,0.187541,0, + 0.320851,0.187541,0, + 0.321271,0.186282,0, + 0.321271,0.186282,0, + 0.32274,0.188101,0, + 0.32274,0.188101,0, + 0.325819,0.187822,0, + 0.325819,0.187822,0, + 0.326799,0.186282,0, + 0.326799,0.186282,0, + 0.329178,0.184392,0, + 0.329178,0.184392,0, + 0.330297,0.183203,0, + 0.330297,0.183203,0, + 0.333377,0.182503,0, + 0.333377,0.182503,0, + 0.337016,0.180124,0, + 0.336456,0.180124,0, + 0.339447,0.178584,0, + 0.339447,0.178584,0, + 0.339447,0.177465,0, + 0.339447,0.177465,0, + 0.336456,0.173406,0, + 0.336456,0.173406,0, + 0.343453,0.172706,0, + 0.343453,0.172706,0, + 0.346322,0.173406,0, + 0.346322,0.173406,0, + 0.347792,0.175435,0, + 0.347792,0.175435,0, + 0.349191,0.182503,0, + 0.349191,0.182503,0, + 0.350451,0.185337,0, + 0.350451,0.185337,0, + 0.35521,0.188801,0, + 0.35521,0.188801,0, + 0.35577,0.1916,0, + 0.35577,0.1916,0, + 0.358009,0.19272,0, + 0.358009,0.19272,0, + 0.358009,0.195309,0, + 0.358009,0.195309,0, + 0.352481,0.197898,0, + 0.352481,0.197898,0, + 0.351431,0.202097,0, + 0.351431,0.202097,0, + 0.35577,0.205036,0, + 0.35577,0.205036,0, + 0.358009,0.208115,0, + 0.358009,0.208115,0, + 0.359408,0.213853,0, + 0.359408,0.213853,0, + 0.358708,0.218612,0, + 0.358708,0.218612,0, + 0.360388,0.221271,0, + 0.360388,0.221271,0, + 0.358009,0.221271,0, + 0.358009,0.221271,0, + 0.358009,0.22379,0, + 0.358009,0.22379,0, + 0.35577,0.225469,0, + 0.35577,0.225469,0, + 0.358009,0.227149,0, + 0.358009,0.227149,0, + 0.356889,0.230088,0, + 0.356889,0.230088,0, + 0.353601,0.230788,0, + 0.353601,0.230788,0, + 0.352481,0.236106,0, + 0.352481,0.235196,0, + 0.35451,0.240025,0, + 0.35451,0.240025,0, + 0.35577,0.239325,0, + 0.35577,0.239325,0, + 0.35577,0.241215,0, + 0.35577,0.241215,0, + 0.35451,0.242264,0, + 0.35451,0.242264,0, + 0.35451,0.246743,0, + 0.35451,0.246743,0, + 0.351956,0.251081,0, + 0.351956,0.251081,0, + 0.347792,0.25416,0, + 0.347792,0.25416,0, + 0.347792,0.25612,0, + 0.347792,0.25612,0, + 0.344153,0.25612,0, + 0.344153,0.25612,0, + 0.344153,0.25374,0, + 0.344153,0.25374,0, + 0.342334,0.25416,0, + 0.342334,0.25416,0, + 0.339447,0.260248,0, + 0.339447,0.260248,0, + 0.339447,0.262978,0, + 0.339447,0.262978,0, + 0.340891,0.262978,0, + 0.340891,0.262978,0, + 0.340891,0.265357,0, + 0.340891,0.265357,0, + 0.349821,0.265357,0, + 0.349821,0.265357,0, + 0.353601,0.262978,0, + 0.353601,0.262978,0, + 0.353601,0.428686,0, + 0.394957,0.215252,0, + 0.395937,0.218332,0, + 0.395937,0.218332,0, + 0.399996,0.221271,0, + 0.399996,0.221271,0, + 0.402795,0.225469,0, + 0.402795,0.225469,0, + 0.402795,0.230788,0, + 0.402795,0.230788,0, + 0.400696,0.234287,0, + 0.400696,0.234287,0, + 0.397967,0.234287,0, + 0.397967,0.234287,0, + 0.394957,0.236106,0, + 0.394957,0.236106,0, + 0.394957,0.430155,0, + 0.353601,0.428686,0, + 0.349751,0.432744,0, + 0.349751,0.432744,0, + 0.349191,0.435054,0, + 0.349191,0.435054,0, + 0.350452,0.436593,0, + 0.350452,0.436593,0, + 0.346812,0.442122,0, + 0.346812,0.442122,0, + 0.346812,0.44674,0, + 0.346812,0.44674,0, + 0.343104,0.44758,0, + 0.343104,0.44758,0, + 0.343104,0.450099,0, + 0.343104,0.450099,0, + 0.339115,0.456047,0, + 0.339115,0.456047,0, + 0.334636,0.459616,0, + 0.334636,0.459616,0, + 0.325959,0.459616,0, + 0.325959,0.459616,0, + 0.323125,0.460456,0, + 0.323125,0.460456,0, + 0.311823,0.468433,0, + 0.333517,0.476971,0, + 0.353601,0.47816,0, + 0.353601,0.47816,0, + 0.353601,0.498384,0, + 0.395237,0.498384,0, + 0.395237,0.481309,0, + 0.436664,0.498384,0, + 0.436664,0.47935,0, + 0.436664,0.47935,0, + 0.422948,0.481309,0, + 0.422948,0.481309,0, + 0.395237,0.481309,0, + 0.436664,0.47935,0, + 0.44912,0.476341,0, + 0.44912,0.476341,0, + 0.463116,0.476341,0, + 0.463116,0.476341,0, + 0.466475,0.475711,0, + 0.466475,0.475711,0, + 0.464795,0.473891,0, + 0.465635,0.473891,0, + 0.451779,0.470952,0, + 0.451779,0.470952,0, + 0.451079,0.464444,0, + 0.451079,0.464444,0, + 0.44912,0.460456,0, + 0.44912,0.460456,0, + 0.4501,0.457831,0, + 0.4501,0.457831,0, + 0.451779,0.457831,0, + 0.451779,0.457831,0, + 0.451429,0.456047,0, + 0.451429,0.456047,0, + 0.446181,0.455138,0, + 0.446181,0.455138,0, + 0.440023,0.450799,0, + 0.440023,0.450799,0, + 0.439183,0.44884,0, + 0.439183,0.44884,0, + 0.440863,0.44604,0, + 0.440863,0.44604,0, + 0.440863,0.444431,0, + 0.440863,0.444431,0, + 0.436664,0.442122,0, + 0.436664,0.442122,0, + 0.425748,0.439042,0, + 0.425748,0.439042,0, + 0.410352,0.437643,0, + 0.410352,0.437643,0, + 0.404754,0.432744,0, + 0.404754,0.432744,0, + 0.395237,0.430155,0, + 0.478371,0.498384,0, + 0.478371,0.436593,0, + 0.478371,0.436593,0, + 0.429246,0.436593,0, + 0.429246,0.436593,0, + 0.429246,0.422948,0, + 0.429246,0.422948,0, + 0.436664,0.422948,0, + 0.478371,0.422948,0, + 0.478371,0.402514,0, + 0.477671,0.402514,0, + 0.476552,0.402514,0, + 0.476552,0.402514,0, + 0.474872,0.400135,0, + 0.474872,0.400135,0, + 0.471933,0.400135,0, + 0.471933,0.400135,0, + 0.470254,0.398735,0, + 0.470254,0.398735,0, + 0.471093,0.396636,0, + 0.471093,0.396636,0, + 0.473403,0.395726,0, + 0.473403,0.395726,0, + 0.470254,0.393347,0, + 0.470254,0.393347,0, + 0.471093,0.390898,0, + 0.471093,0.390898,0, + 0.475712,0.390898,0, + 0.475712,0.390898,0, + 0.477671,0.392122,0, + 0.477671,0.392122,0, + 0.477671,0.370464,0, + 0.436664,0.422948,0, + 0.436664,0.360527,0, + 0.436664,0.360527,0, + 0.411192,0.360527,0, + 0.411192,0.360527,0, + 0.411192,0.35017,0, + 0.411192,0.35017,0, + 0.436664,0.35017,0, + 0.436664,0.35017,0, + 0.436664,0.300206,0, + 0.436664,0.300206,0, + 0.422668,0.300206,0, + 0.422668,0.300206,0, + 0.422668,0.285931,0, + 0.422668,0.285931,0, + 0.436385,0.285931,0, + 0.478092,0.260879,0, + 0.474452,0.262978,0, + 0.474452,0.262978,0, + 0.462976,0.270255,0, + 0.462976,0.270255,0, + 0.462136,0.274734,0, + 0.462136,0.274734,0, + 0.458078,0.279213,0, + 0.458078,0.279213,0, + 0.454579,0.279213,0, + 0.454579,0.279213,0, + 0.453879,0.281032,0, + 0.453879,0.281032,0, + 0.452899,0.283271,0, + 0.452899,0.283271,0, + 0.453388,0.28733,0, + 0.453388,0.28733,0, + 0.4508,0.290129,0, + 0.4508,0.290129,0, + 0.453388,0.291668,0, + 0.453388,0.291668,0, + 0.453879,0.295727,0, + 0.453879,0.295727,0, + 0.454579,0.297267,0, + 0.454579,0.297267,0, + 0.454579,0.300906,0, + 0.454579,0.300906,0, + 0.452094,0.305944,0, + 0.452094,0.305944,0, + 0.452899,0.309583,0, + 0.452899,0.309583,0, + 0.454229,0.311402,0, + 0.454229,0.311402,0, + 0.455418,0.314482,0, + 0.455418,0.314482,0, + 0.458078,0.317561,0, + 0.458078,0.317561,0, + 0.458078,0.31882,0, + 0.458078,0.31882,0, + 0.459197,0.31882,0, + 0.459197,0.31882,0, + 0.459197,0.32036,0, + 0.459197,0.32036,0, + 0.441842,0.32036,0, + 0.441842,0.32036,0, + 0.441842,0.332536,0, + 0.441842,0.332536,0, + 0.458078,0.365145,0, + 0.458078,0.365145,0, + 0.474872,0.365145,0, + 0.474872,0.365145,0, + 0.473403,0.368504,0, + 0.473403,0.368504,0, + 0.475712,0.369344,0, + 0.475712,0.369344,0, + 0.477671,0.370464,0, + 0.474872,0.365145,0, + 0.476691,0.365985,0, + 0.476691,0.365985,0, + 0.477111,0.365145,0, + 0.477111,0.365145,0, + 0.481311,0.365145,0, + 0.481311,0.365145,0, + 0.48215,0.364306,0, + 0.48215,0.364306,0, + 0.48061,0.362486,0, + 0.48061,0.362486,0, + 0.48061,0.359267,0, + 0.48061,0.359267,0, + 0.47921,0.358568,0, + 0.47921,0.358568,0, + 0.479911,0.357168,0, + 0.479911,0.357168,0, + 0.47921,0.355349,0, + 0.47921,0.355349,0, + 0.479911,0.354369,0, + 0.479911,0.354369,0, + 0.47921,0.352829,0, + 0.47921,0.352829,0, + 0.47921,0.35171,0, + 0.47921,0.35171,0, + 0.48215,0.35171,0, + 0.48215,0.35171,0, + 0.48215,0.349471,0, + 0.48215,0.349471,0, + 0.484389,0.348841,0, + 0.484389,0.348841,0, + 0.486209,0.346251,0, + 0.486209,0.346251,0, + 0.491387,0.346251,0, + 0.491387,0.346251,0, + 0.494046,0.346251,0, + 0.494046,0.346251,0, + 0.494886,0.344992,0, + 0.494886,0.344992,0, + 0.494466,0.340794,0, + 0.494466,0.340794,0, + 0.496426,0.339394,0, + 0.496426,0.339394,0, + 0.495446,0.337994,0, + 0.495446,0.337994,0, + 0.491387,0.337994,0, + 0.491387,0.337994,0, + 0.488798,0.336874,0, + 0.488798,0.336874,0, + 0.488798,0.335055,0, + 0.488798,0.335055,0, + 0.484389,0.331696,0, + 0.484389,0.331696,0, + 0.478092,0.330576,0, + 0.478092,0.330576,0, + 0.475292,0.328757,0, + 0.475292,0.328757,0, + 0.475292,0.324558,0, + 0.475292,0.324558,0, + 0.502304,0.307764,0, + 0.502304,0.307764,0, + 0.502304,0.306504,0, + 0.502304,0.306504,0, + 0.505943,0.304685,0, + 0.505943,0.304685,0, + 0.508322,0.304685,0, + 0.508322,0.304685,0, + 0.508322,0.301746,0, + 0.508322,0.301746,0, + 0.511261,0.301746,0, + 0.511261,0.301746,0, + 0.511261,0.294328,0, + 0.511261,0.294328,0, + 0.509022,0.290899,0, + 0.509022,0.290899,0, + 0.5,0.290129,0, + 0.5,0.290129,0, + 0.5,0.28733,0, + 0.5,0.28733,0, + 0.502304,0.28733,0, + 0.502304,0.28733,0, + 0.502304,0.285301,0, + 0.502304,0.285301,0, + 0.505943,0.283831,0, + 0.505943,0.283831,0, + 0.505943,0.281032,0, + 0.505943,0.281032,0, + 0.503423,0.280122,0, + 0.503423,0.280122,0, + 0.501152,0.279213,0, + 0.501152,0.279213,0, + 0.502288,0.276973,0, + 0.502288,0.276973,0, + 0.503423,0.276973,0, + 0.503423,0.276973,0, + 0.503423,0.274734,0, + 0.503423,0.274734,0, + 0.504124,0.273754,0, + 0.504124,0.273754,0, + 0.504124,0.266617,0, + 0.504124,0.266617,0, + 0.508322,0.266617,0, + 0.508322,0.266617,0, + 0.511261,0.266617,0, + 0.511261,0.266617,0, + 0.5135,0.265077,0, + 0.5135,0.265077,0, + 0.51518,0.261928,0, + 0.51518,0.261928,0, + 0.515879,0.260879,0, + 0.515879,0.260879,0, + 0.520218,0.261403,0, + 0.520218,0.261403,0, + 0.520218,0.246481,0, + 0.520218,0.246481,0, + 0.506223,0.246481,0, + 0.506223,0.246481,0, + 0.506223,0.238205,0, + 0.507132,0.238205,0, + 0.519519,0.238205,0, + 0.520078,0.498384,0, + 0.520078,0.424767,0, + 0.520078,0.424767,0, + 0.516299,0.422948,0, + 0.516299,0.422948,0, + 0.5128,0.421408,0, + 0.5128,0.421408,0, + 0.5121,0.417209,0, + 0.5121,0.417209,0, + 0.5135,0.41609,0, + 0.5135,0.41609,0, + 0.51455,0.412171,0, + 0.51455,0.412171,0, + 0.516299,0.410491,0, + 0.516299,0.410491,0, + 0.518188,0.409792,0, + 0.518188,0.409792,0, + 0.520078,0.409792,0, + 0.520078,0.409792,0, + 0.520078,0.397685,0, + 0.520078,0.397685,0, + 0.5128,0.396636,0, + 0.5128,0.396636,0, + 0.5121,0.394536,0, + 0.5121,0.394536,0, + 0.507761,0.39151,0, + 0.507761,0.39151,0, + 0.503423,0.390898,0, + 0.503423,0.390898,0, + 0.503423,0.388239,0, + 0.503423,0.388239,0, + 0.5,0.387399,0, + 0.5,0.387399,0, + 0.499364,0.385719,0, + 0.499364,0.385719,0, + 0.496426,0.386559,0, + 0.496426,0.386559,0, + 0.495936,0.387399,0, + 0.495936,0.387399,0, + 0.494046,0.386979,0, + 0.494046,0.386979,0, + 0.494676,0.3839,0, + 0.494676,0.3839,0, + 0.492087,0.3839,0, + 0.492087,0.3839,0, + 0.491387,0.3846,0, + 0.490827,0.3846,0, + 0.487328,0.3846,0, + 0.487328,0.3846,0, + 0.485298,0.3832,0, + 0.485298,0.3832,0, + 0.487328,0.381293,0, + 0.487328,0.381293,0, + 0.490092,0.380401,0, + 0.490092,0.380401,0, + 0.490827,0.380401,0, + 0.490827,0.380401,0, + 0.492717,0.380401,0, + 0.492717,0.380401,0, + 0.493381,0.377882,0, + 0.493381,0.377882,0, + 0.496426,0.375782,0, + 0.496426,0.375782,0, + 0.494992,0.368924,0, + 0.494992,0.368924,0, + 0.477671,0.370464,0, + 0.561785,0.498384,0, + 0.561785,0.474801,0, + 0.561785,0.474801,0, + 0.593415,0.474801,0, + 0.593415,0.474801,0, + 0.593415,0.459144,0, + 0.593415,0.459144,0, + 0.561785,0.459144,0, + 0.561785,0.459144,0, + 0.561785,0.44534,0, + 0.561785,0.44534,0, + 0.564724,0.44632,0, + 0.564724,0.44632,0, + 0.577601,0.44632,0, + 0.577601,0.44632,0, + 0.583198,0.44534,0, + 0.583198,0.44534,0, + 0.589916,0.442542,0, + 0.589916,0.442542,0, + 0.593415,0.441282,0, + 0.593415,0.441282,0, + 0.599013,0.441282,0, + 0.599013,0.441282,0, + 0.603632,0.439882,0, + 0.603632,0.439882,0, + 0.603632,0.467488,0, + 0.603632,0.467488,0, + 0.599013,0.467488,0, + 0.599013,0.467488,0, + 0.599013,0.474801,0, + 0.599013,0.474801,0, + 0.603632,0.474801,0, + 0.603632,0.474801,0, + 0.603632,0.498384,0, + 0.585335,0.44445,0, + 0.585335,0.441912,0, + 0.585335,0.441912,0, + 0.583198,0.441912,0, + 0.583198,0.441912,0, + 0.5804,0.441282,0, + 0.5804,0.441282,0, + 0.578299,0.439882,0, + 0.578299,0.439882,0, + 0.578299,0.438063,0, + 0.578299,0.438063,0, + 0.582498,0.436593,0, + 0.582498,0.436593,0, + 0.583198,0.435264,0, + 0.583198,0.435264,0, + 0.579349,0.434564,0, + 0.579349,0.434564,0, + 0.583198,0.431485,0, + 0.583198,0.431485,0, + 0.582498,0.429945,0, + 0.582498,0.429945,0, + 0.582498,0.429106,0, + 0.582498,0.429106,0, + 0.584266,0.426866,0, + 0.584266,0.426866,0, + 0.583824,0.425817,0, + 0.583824,0.425817,0, + 0.585335,0.423857,0, + 0.585335,0.423857,0, + 0.586557,0.423857,0, + 0.586557,0.423857,0, + 0.586557,0.422178,0, + 0.586557,0.422178,0, + 0.581274,0.418609,0, + 0.581274,0.418609,0, + 0.57662,0.41665,0, + 0.57662,0.41665,0, + 0.578299,0.413291,0, + 0.578299,0.413291,0, + 0.57592,0.412171,0, + 0.57592,0.412171,0, + 0.57711,0.409792,0, + 0.57711,0.409792,0, + 0.57592,0.408952,0, + 0.57592,0.408952,0, + 0.57662,0.407132,0, + 0.57662,0.407132,0, + 0.57746,0.404893,0, + 0.57746,0.404893,0, + 0.580399,0.404893,0, + 0.580399,0.404893,0, + 0.581274,0.403739,0, + 0.581274,0.403739,0, + 0.585335,0.403739,0, + 0.585335,0.403739,0, + 0.585335,0.400135,0, + 0.585335,0.400135,0, + 0.589496,0.397685,0, + 0.589496,0.397685,0, + 0.589496,0.396636,0, + 0.589496,0.396636,0, + 0.586557,0.396181,0, + 0.586557,0.396181,0, + 0.587415,0.393347,0, + 0.587415,0.393347,0, + 0.589496,0.393023,0, + 0.589496,0.393023,0, + 0.589496,0.394536,0, + 0.589496,0.394536,0, + 0.593975,0.394764,0, + 0.593975,0.394764,0, + 0.595375,0.393023,0, + 0.595375,0.393023,0, + 0.593975,0.391204,0, + 0.593975,0.391204,0, + 0.597894,0.390898,0, + 0.597894,0.390898,0, + 0.598593,0.388239,0, + 0.598593,0.388239,0, + 0.603632,0.388239,0, + 0.603632,0.388239,0, + 0.603632,0.387189,0, + 0.603632,0.387189,0, + 0.60853,0.387189,0, + 0.60853,0.387189,0, + 0.61049,0.386139,0, + 0.61049,0.386139,0, + 0.60951,0.3839,0, + 0.60951,0.3839,0, + 0.61049,0.382247,0, + 0.61049,0.382247,0, + 0.606081,0.381293,0, + 0.606081,0.381293,0, + 0.601112,0.373823,0, + 0.601112,0.373823,0, + 0.601112,0.363396,0, + 0.601112,0.363396,0, + 0.61049,0.362486,0, + 0.61049,0.362486,0, + 0.614968,0.364306,0, + 0.5804,0.441282,0, + 0.580399,0.442542,0, + 0.580399,0.442542,0, + 0.57662,0.443941,0, + 0.57662,0.443941,0, + 0.571162,0.442542,0, + 0.571162,0.442542,0, + 0.571162,0.440582,0, + 0.571162,0.440582,0, + 0.567803,0.438063,0, + 0.567803,0.438063,0, + 0.565844,0.439882,0, + 0.565844,0.439882,0, + 0.563255,0.439882,0, + 0.563255,0.439882,0, + 0.558706,0.441597,0, + 0.558706,0.441597,0, + 0.557586,0.440582,0, + 0.557586,0.440582,0, + 0.56098,0.438063,0, + 0.56098,0.438063,0, + 0.564549,0.438063,0, + 0.564549,0.438063,0, + 0.565844,0.434564,0, + 0.565844,0.434564,0, + 0.565196,0.433024,0, + 0.565196,0.433024,0, + 0.566823,0.431485,0, + 0.566823,0.431485,0, + 0.556887,0.424767,0, + 0.556887,0.424767,0, + 0.553108,0.41665,0, + 0.553108,0.41665,0, + 0.553108,0.41413,0, + 0.553108,0.41413,0, + 0.558706,0.41413,0, + 0.558706,0.41413,0, + 0.557586,0.402514,0, + 0.557586,0.402514,0, + 0.562764,0.401324,0, + 0.562764,0.401324,0, + 0.562764,0.400135,0, + 0.562764,0.400135,0, + 0.565196,0.399435,0, + 0.565196,0.399435,0, + 0.56601,0.395586,0, + 0.56601,0.395586,0, + 0.56398,0.393893,0, + 0.56398,0.393893,0, + 0.565603,0.392113,0, + 0.565603,0.392113,0, + 0.566823,0.389568,0, + 0.566823,0.389568,0, + 0.562764,0.386664,0, + 0.562764,0.386664,0, + 0.562764,0.38502,0, + 0.562764,0.38502,0, + 0.560175,0.38425,0, + 0.560175,0.38425,0, + 0.56147,0.383074,0, + 0.56147,0.383074,0, + 0.562764,0.382247,0, + 0.562764,0.382247,0, + 0.56147,0.380847,0, + 0.56147,0.380847,0, + 0.558706,0.377558,0, + 0.558706,0.377558,0, + 0.555907,0.376832,0, + 0.555907,0.376832,0, + 0.560088,0.372353,0, + 0.560088,0.372353,0, + 0.562764,0.372353,0, + 0.562764,0.372353,0, + 0.562764,0.371164,0, + 0.562764,0.371164,0, + 0.56147,0.369344,0, + 0.56147,0.369344,0, + 0.56398,0.368504,0, + 0.56398,0.368504,0, + 0.562117,0.366825,0, + 0.562117,0.366825,0, + 0.562117,0.365985,0, + 0.562117,0.365985,0, + 0.56398,0.365145,0, + 0.56398,0.365145,0, + 0.56398,0.363396,0, + 0.56398,0.363396,0, + 0.560822,0.362486,0, + 0.560822,0.362486,0, + 0.558706,0.362486,0, + 0.558706,0.362486,0, + 0.556606,0.359827,0, + 0.556606,0.359827,0, + 0.553108,0.359827,0, + 0.553108,0.359827,0, + 0.555907,0.357868,0, + 0.555907,0.357868,0, + 0.556606,0.357168,0, + 0.556606,0.357168,0, + 0.556606,0.355349,0, + 0.556606,0.355349,0, + 0.556606,0.353599,0, + 0.556606,0.353599,0, + 0.558706,0.352829,0, + 0.558706,0.352829,0, + 0.558706,0.35059,0, + 0.558706,0.35059,0, + 0.561426,0.35059,0, + 0.561426,0.35059,0, + 0.562117,0.35059,0, + 0.562117,0.35059,0, + 0.562117,0.340794,0, + 0.562117,0.340794,0, + 0.56398,0.339394,0, + 0.56398,0.339394,0, + 0.566823,0.337994,0, + 0.566823,0.337994,0, + 0.569482,0.337994,0, + 0.569482,0.337994,0, + 0.569482,0.336874,0, + 0.569482,0.336874,0, + 0.568153,0.335965,0, + 0.568153,0.335965,0, + 0.569482,0.334215,0, + 0.569482,0.334215,0, + 0.568153,0.332536,0, + 0.568153,0.332536,0, + 0.569482,0.330576,0, + 0.569482,0.330576,0, + 0.569482,0.304685,0, + 0.569482,0.304685,0, + 0.565844,0.303215,0, + 0.565844,0.303215,0, + 0.565844,0.292613,0, + 0.565844,0.292613,0, + 0.563465,0.292613,0, + 0.563465,0.292613,0, + 0.561785,0.28733,0, + 0.561785,0.28733,0, + 0.560385,0.284566,0, + 0.560385,0.284566,0, + 0.561785,0.283831,0, + 0.561785,0.283831,0, + 0.561785,0.281032,0, + 0.561785,0.281032,0, + 0.562625,0.278093,0, + 0.562625,0.278093,0, + 0.565844,0.275854,0, + 0.565844,0.275854,0, + 0.564654,0.272495,0, + 0.564654,0.272495,0, + 0.566544,0.272495,0, + 0.566544,0.272495,0, + 0.566544,0.271655,0, + 0.566544,0.271655,0, + 0.568363,0.271655,0, + 0.568363,0.271655,0, + 0.569482,0.268996,0, + 0.569482,0.268996,0, + 0.573401,0.267596,0, + 0.573401,0.267596,0, + 0.573401,0.266617,0, + 0.573401,0.266617,0, + 0.575361,0.265077,0, + 0.575361,0.265077,0, + 0.575361,0.262978,0, + 0.575361,0.262978,0, + 0.572561,0.261928,0, + 0.572561,0.261928,0, + 0.568363,0.262978,0, + 0.568363,0.262978,0, + 0.562205,0.261403,0, + 0.562205,0.261403,0, + 0.561785,0.260178,0, + 0.561785,0.260178,0, + 0.564654,0.259479,0, + 0.564654,0.259479,0, + 0.563219,0.258219,0, + 0.563219,0.258219,0, + 0.563219,0.25626,0, + 0.563937,0.25626,0, + 0.565598,0.25514,0, + 0.565598,0.25514,0, + 0.562205,0.25514,0, + 0.562205,0.25514,0, + 0.561085,0.252901,0, + 0.561085,0.252901,0, + 0.564768,0.246481,0, + 0.564768,0.246481,0, + 0.567453,0.244364,0, + 0.567453,0.244364,0, + 0.567453,0.243104,0, + 0.567453,0.243104,0, + 0.561085,0.243104,0, + 0.561085,0.243104,0, + 0.557167,0.241704,0, + 0.557167,0.241704,0, + 0.556606,0.238905,0, + 0.556606,0.238905,0, + 0.555767,0.233307,0, + 0.555767,0.233307,0, + 0.553808,0.232084,0, + 0.553808,0.232084,0, + 0.553808,0.229528,0, + 0.553808,0.229528,0, + 0.556187,0.229528,0, + 0.556187,0.229528,0, + 0.556886,0.228548,0, + 0.556886,0.228548,0, + 0.560245,0.228548,0, + 0.560245,0.228548,0, + 0.560245,0.22281,0, + 0.560245,0.22281,0, + 0.561225,0.220431,0, + 0.561225,0.220431,0, + 0.561085,0.217632,0, + 0.561085,0.217632,0, + 0.56611,0.217632,0, + 0.56611,0.217632,0, + 0.56611,0.212593,0, + 0.56611,0.212593,0, + 0.560245,0.212593,0, + 0.560245,0.212593,0, + 0.560245,0.203356,0, + 0.560245,0.203356,0, + 0.564269,0.200138,0, + 0.564269,0.200138,0, + 0.561225,0.199018,0, + 0.561225,0.199018,0, + 0.552968,0.199018,0, + 0.552968,0.199018,0, + 0.550449,0.200837,0, + 0.550449,0.200837,0, + 0.537992,0.200837,0, + 0.537152,0.200837,0, + 0.535893,0.201747,0, + 0.535893,0.201747,0, + 0.534074,0.200837,0, + 0.534074,0.200837,0, + 0.531974,0.201292,0, + 0.531974,0.201292,0, + 0.531274,0.199927,0, + 0.531274,0.199927,0, + 0.533024,0.197058,0, + 0.533024,0.197058,0, + 0.537992,0.188801,0, + 0.537992,0.188801,0, + 0.540091,0.186701,0, + 0.540091,0.186701,0, + 0.539042,0.181523,0, + 0.539042,0.181523,0, + 0.540931,0.180683,0, + 0.540931,0.180683,0, + 0.540931,0.176345,0, + 0.540931,0.176345,0, + 0.542611,0.171586,0, + 0.542611,0.171586,0, + 0.54527,0.169907,0, + 0.54527,0.169907,0, + 0.546809,0.167387,0, + 0.546809,0.167387,0, + 0.546809,0.165848,0, + 0.546809,0.165848,0, + 0.550449,0.16053,0, + 0.550449,0.16053,0, + 0.550449,0.15941,0, + 0.550449,0.15941,0, + 0.549189,0.157591,0, + 0.549189,0.157591,0, + 0.550449,0.155911,0, + 0.550449,0.155911,0, + 0.550449,0.154092,0, + 0.550449,0.154092,0, + 0.554787,0.152272,0, + 0.554787,0.152272,0, + 0.556187,0.153182,0, + 0.556187,0.153182,0, + 0.558566,0.154092,0, + 0.558566,0.154092,0, + 0.560245,0.153637,0, + 0.560245,0.153637,0, + 0.561225,0.155071,0, + 0.602932,0.200138,0, + 0.60979,0.203356,0, + 0.60979,0.203356,0, + 0.612729,0.207135,0, + 0.612729,0.207135,0, + 0.612729,0.208535,0, + 0.612729,0.208535,0, + 0.61126,0.210354,0, + 0.61126,0.210354,0, + 0.611995,0.217632,0, + 0.611995,0.217632,0, + 0.612729,0.219031,0, + 0.612729,0.219031,0, + 0.611627,0.220431,0, + 0.611627,0.220431,0, + 0.60979,0.218611,0, + 0.610709,0.218611,0, + 0.604332,0.217632,0, + 0.604332,0.217632,0, + 0.604332,0.216512,0, + 0.604332,0.216512,0, + 0.599153,0.216512,0, + 0.599153,0.216512,0, + 0.598593,0.217632,0, + 0.598593,0.217632,0, + 0.596074,0.217632,0, + 0.596074,0.217632,0, + 0.594535,0.22281,0, + 0.594535,0.22281,0, + 0.590896,0.22281,0, + 0.590896,0.22281,0, + 0.585018,0.22463,0, + 0.585018,0.22463,0, + 0.583339,0.229528,0, + 0.583339,0.229528,0, + 0.581659,0.230228,0, + 0.581659,0.230228,0, + 0.580119,0.236106,0, + 0.580119,0.236106,0, + 0.583339,0.238205,0, + 0.583339,0.238205,0, + 0.586137,0.238905,0, + 0.586137,0.238905,0, + 0.586137,0.240305,0, + 0.586137,0.240305,0, + 0.584178,0.241704,0, + 0.584178,0.241704,0, + 0.586137,0.243104,0, + 0.586137,0.243104,0, + 0.585158,0.245422,0, + 0.585158,0.245422,0, + 0.581729,0.245422,0, + 0.581729,0.245422,0, + 0.581729,0.248982,0, + 0.581729,0.248982,0, + 0.583339,0.252201,0, + 0.583339,0.252201,0, + 0.586698,0.25514,0, + 0.586698,0.25514,0, + 0.585018,0.25626,0, + 0.585018,0.25626,0, + 0.585648,0.259479,0, + 0.585648,0.259479,0, + 0.587957,0.259829,0, + 0.587957,0.259829,0, + 0.592716,0.259829,0, + 0.592716,0.259829,0, + 0.594535,0.261403,0, + 0.594535,0.261403,0, + 0.598593,0.261403,0, + 0.598593,0.261403,0, + 0.598873,0.264027,0, + 0.598873,0.264027,0, + 0.597334,0.264027,0, + 0.597334,0.264027,0, + 0.596074,0.267596,0, + 0.596074,0.267596,0, + 0.592716,0.270325,0, + 0.592716,0.270325,0, + 0.590896,0.270325,0, + 0.590896,0.270325,0, + 0.591806,0.272495,0, + 0.591806,0.272495,0, + 0.594395,0.272495,0, + 0.594395,0.272495,0, + 0.593625,0.276973,0, + 0.593101,0.275854,0, + 0.594535,0.278793,0, + 0.594535,0.278793,0, + 0.596704,0.278793,0, + 0.596704,0.278793,0, + 0.597334,0.282431,0, + 0.597334,0.282431,0, + 0.598104,0.284199,0, + 0.598104,0.284199,0, + 0.599713,0.284199,0, + 0.599713,0.284199,0, + 0.601112,0.28733,0, + 0.601112,0.28733,0, + 0.600413,0.290899,0, + 0.600413,0.290899,0, + 0.601952,0.293348,0, + 0.601952,0.293348,0, + 0.601952,0.295868,0, + 0.601952,0.295868,0, + 0.605801,0.297914,0, + 0.605801,0.297914,0, + 0.607131,0.299646,0, + 0.607131,0.299646,0, + 0.605801,0.300626,0, + 0.605801,0.300626,0, + 0.605801,0.302585,0, + 0.605801,0.302585,0, + 0.603877,0.302585,0, + 0.603877,0.302585,0, + 0.603877,0.316161,0, + 0.603877,0.316161,0, + 0.597019,0.326518,0, + 0.597019,0.326518,0, + 0.595619,0.326518,0, + 0.595619,0.326518,0, + 0.596074,0.330576,0, + 0.596074,0.330576,0, + 0.599713,0.330576,0, + 0.599713,0.330576,0, + 0.601112,0.331556,0, + 0.601112,0.331556,0, + 0.603877,0.331556,0, + 0.603877,0.331556,0, + 0.603877,0.333376,0, + 0.603877,0.333376,0, + 0.605801,0.333376,0, + 0.605801,0.333376,0, + 0.602494,0.336874,0, + 0.602494,0.336874,0, + 0.608111,0.337994,0, + 0.608111,0.337994,0, + 0.607131,0.341493,0, + 0.607131,0.341493,0, + 0.613989,0.344152,0, + 0.613989,0.344152,0, + 0.613989,0.349471,0, + 0.613989,0.349471,0, + 0.614968,0.35059,0, + 0.614968,0.35059,0, + 0.616228,0.35059,0, + 0.616228,0.35059,0, + 0.618467,0.352829,0, + 0.618467,0.352829,0, + 0.622526,0.35171,0, + 0.622526,0.35171,0, + 0.623646,0.35227,0, + 0.623646,0.35227,0, + 0.621826,0.357868,0, + 0.621826,0.357868,0, + 0.623086,0.358847,0, + 0.623086,0.358847,0, + 0.620496,0.362486,0, + 0.620496,0.362486,0, + 0.618467,0.364306,0, + 0.618467,0.364306,0, + 0.614968,0.364306,0, + 0.644779,0.498384,0, + 0.644779,0.47893,0, + 0.686625,0.498384,0, + 0.686625,0.47893,0, + 0.686625,0.462975,0, + 0.690964,0.462975,0, + 0.690964,0.462975,0, + 0.690964,0.461016,0, + 0.690964,0.461016,0, + 0.686625,0.459896,0, + 0.686625,0.459896,0, + 0.686625,0.453528,0, + 0.644779,0.47893,0, + 0.686625,0.47893,0, + 0.728192,0.498384,0, + 0.728192,0.492366,0, + 0.728192,0.492366,0, + 0.686625,0.475431,0, + 0.686625,0.44716,0, + 0.684946,0.44632,0, + 0.684946,0.44632,0, + 0.684106,0.44534,0, + 0.684106,0.44534,0, + 0.686625,0.44445,0, + 0.686625,0.44445,0, + 0.685786,0.443941,0, + 0.685786,0.443941,0, + 0.684946,0.442542,0, + 0.684946,0.442542,0, + 0.685366,0.441089,0, + 0.685366,0.441089,0, + 0.687885,0.441562,0, + 0.687885,0.441562,0, + 0.689845,0.440582,0, + 0.689845,0.440582,0, + 0.691524,0.439882,0, + 0.691524,0.439882,0, + 0.689845,0.438063,0, + 0.689845,0.438063,0, + 0.683267,0.440739,0, + 0.683267,0.440739,0, + 0.679348,0.441325,0, + 0.679348,0.441325,0, + 0.678368,0.439882,0, + 0.678368,0.439882,0, + 0.681307,0.439401,0, + 0.681307,0.439401,0, + 0.680747,0.438063,0, + 0.680747,0.438063,0, + 0.683267,0.437328,0, + 0.683267,0.437328,0, + 0.683267,0.436313,0, + 0.683267,0.436313,0, + 0.679838,0.433794,0, + 0.679838,0.433794,0, + 0.67389,0.433024,0, + 0.67389,0.433024,0, + 0.67389,0.432255,0, + 0.67389,0.432255,0, + 0.670111,0.430715,0, + 0.670111,0.430715,0, + 0.667872,0.429106,0, + 0.667872,0.429106,0, + 0.666332,0.429526,0, + 0.666332,0.429526,0, + 0.664513,0.428126,0, + 0.664513,0.428126,0, + 0.665422,0.425817,0, + 0.665422,0.425817,0, + 0.662973,0.423857,0, + 0.662973,0.423857,0, + 0.664513,0.422178,0, + 0.664513,0.422178,0, + 0.662973,0.418609,0, + 0.662973,0.418609,0, + 0.657095,0.419728,0, + 0.657095,0.419728,0, + 0.651217,0.417629,0, + 0.651217,0.417629,0, + 0.645898,0.418609,0, + 0.645898,0.418609,0, + 0.643099,0.417629,0, + 0.643099,0.417629,0, + 0.644499,0.41539,0, + 0.644499,0.41539,0, + 0.648558,0.41539,0, + 0.648558,0.41539,0, + 0.646528,0.413291,0, + 0.646528,0.413291,0, + 0.648558,0.412731,0, + 0.648558,0.412731,0, + 0.651217,0.408042,0, + 0.651217,0.408042,0, + 0.649887,0.406013,0, + 0.649887,0.406013,0, + 0.650552,0.404316,0, + 0.650552,0.404316,0, + 0.647543,0.404316,0, + 0.647543,0.404316,0, + 0.645898,0.405164,0, + 0.645898,0.405164,0, + 0.643799,0.403739,0, + 0.643799,0.403739,0, + 0.642119,0.404316,0, + 0.642119,0.404316,0, + 0.635262,0.408042,0, + 0.635262,0.408042,0, + 0.629103,0.406179,0, + 0.629103,0.406179,0, + 0.628404,0.408322,0, + 0.628404,0.408322,0, + 0.631343,0.408952,0, + 0.631343,0.408952,0, + 0.631343,0.410386,0, + 0.631343,0.410386,0, + 0.628404,0.409792,0, + 0.628404,0.409792,0, + 0.628404,0.410981,0, + 0.628404,0.410981,0, + 0.631343,0.412731,0, + 0.631343,0.412731,0, + 0.627564,0.41651,0, + 0.627564,0.41651,0, + 0.631343,0.419169,0, + 0.631343,0.419169,0, + 0.633862,0.418119,0, + 0.633862,0.418119,0, + 0.633862,0.41497,0, + 0.633862,0.41497,0, + 0.637781,0.413011,0, + 0.637781,0.413011,0, + 0.637781,0.41462,0, + 0.637781,0.41462,0, + 0.642959,0.41462,0, + 0.642959,0.41462,0, + 0.643799,0.41651,0, + 0.650552,0.404316,0, + 0.646721,0.401324,0, + 0.646721,0.401324,0, + 0.647543,0.400729,0, + 0.647543,0.400729,0, + 0.647543,0.39891,0, + 0.647543,0.39891,0, + 0.644849,0.399435,0, + 0.644849,0.399435,0, + 0.643799,0.396181,0, + 0.643799,0.396181,0, + 0.64142,0.393004,0, + 0.64142,0.393004,0, + 0.634702,0.388239,0, + 0.634702,0.388239,0, + 0.634702,0.387189,0, + 0.634702,0.387189,0, + 0.633862,0.386664,0, + 0.633862,0.386664,0, + 0.631343,0.388239,0, + 0.631343,0.388239,0, + 0.629103,0.386927,0, + 0.629103,0.386927,0, + 0.629873,0.384635,0, + 0.629873,0.384635,0, + 0.628404,0.383662,0, + 0.628404,0.383662,0, + 0.629103,0.38266,0, + 0.629103,0.38266,0, + 0.630224,0.38266,0, + 0.630224,0.38266,0, + 0.631343,0.381293,0, + 0.631343,0.381293,0, + 0.633862,0.381293,0, + 0.633862,0.381293,0, + 0.635262,0.379202,0, + 0.635262,0.379202,0, + 0.636522,0.377195,0, + 0.636522,0.377195,0, + 0.634702,0.375502,0, + 0.634702,0.375502,0, + 0.631343,0.375502,0, + 0.631343,0.375502,0, + 0.629489,0.376349,0, + 0.629489,0.376349,0, + 0.628404,0.378199,0, + 0.628404,0.378199,0, + 0.630224,0.379202,0, + 0.630224,0.379202,0, + 0.628404,0.380847,0, + 0.628404,0.380847,0, + 0.625885,0.381977,0, + 0.625885,0.381977,0, + 0.622737,0.382247,0, + 0.622737,0.382247,0, + 0.620496,0.380248,0, + 0.620496,0.380248,0, + 0.618467,0.380248,0, + 0.618467,0.380248,0, + 0.617347,0.382112,0, + 0.617347,0.382112,0, + 0.616228,0.38177,0, + 0.616228,0.38177,0, + 0.616228,0.383161,0, + 0.616228,0.383161,0, + 0.617907,0.384148,0, + 0.617907,0.384148,0, + 0.617907,0.38502,0, + 0.617907,0.38502,0, + 0.616228,0.38502,0, + 0.616228,0.38502,0, + 0.616228,0.386927,0, + 0.616228,0.386927,0, + 0.614968,0.387583,0, + 0.614968,0.387583,0, + 0.614479,0.390621,0, + 0.614479,0.390621,0, + 0.616228,0.391204,0, + 0.616228,0.391204,0, + 0.617907,0.391204,0, + 0.617907,0.391204,0, + 0.617907,0.393004,0, + 0.617907,0.393004,0, + 0.619482,0.394764,0, + 0.619482,0.394764,0, + 0.628404,0.394764,0, + 0.628404,0.394764,0, + 0.629313,0.395586,0, + 0.629313,0.395586,0, + 0.632603,0.395175,0, + 0.632603,0.395175,0, + 0.633862,0.395586,0, + 0.633862,0.395586,0, + 0.633023,0.39716,0, + 0.633023,0.39716,0, + 0.634562,0.39891,0, + 0.634562,0.39891,0, + 0.638691,0.398035,0, + 0.638691,0.398035,0, + 0.638691,0.400135,0, + 0.638061,0.400135,0, + 0.64142,0.399785,0, + 0.64142,0.399785,0, + 0.642959,0.400729,0, + 0.642959,0.400729,0, + 0.644849,0.399435,0, + 0.614968,0.364306,0, + 0.614968,0.366825,0, + 0.614968,0.366825,0, + 0.61049,0.369344,0, + 0.61049,0.369344,0, + 0.613989,0.370254,0, + 0.613989,0.370254,0, + 0.615353,0.368924,0, + 0.615353,0.368924,0, + 0.618467,0.368924,0, + 0.618467,0.368924,0, + 0.621826,0.366825,0, + 0.621826,0.366825,0, + 0.625885,0.366825,0, + 0.625885,0.366825,0, + 0.629313,0.365145,0, + 0.629313,0.365145,0, + 0.631343,0.363396,0, + 0.631343,0.363396,0, + 0.633862,0.363396,0, + 0.633862,0.363396,0, + 0.634562,0.365145,0, + 0.634562,0.365145,0, + 0.630783,0.368504,0, + 0.630783,0.368504,0, + 0.631903,0.371164,0, + 0.631903,0.371164,0, + 0.631343,0.372353,0, + 0.631343,0.372353,0, + 0.630224,0.371164,0, + 0.630224,0.371164,0, + 0.628404,0.372353,0, + 0.628404,0.372353,0, + 0.631343,0.375502,0, + 0.634562,0.365145,0, + 0.638061,0.361157,0, + 0.638061,0.361157,0, + 0.636522,0.357168,0, + 0.636522,0.357168,0, + 0.635262,0.355349,0, + 0.635262,0.355349,0, + 0.632603,0.356259,0, + 0.632603,0.356259,0, + 0.632672,0.359162,0, + 0.632672,0.359162,0, + 0.630783,0.358847,0, + 0.630783,0.358847,0, + 0.628859,0.356259,0, + 0.628859,0.356259,0, + 0.625885,0.356259,0, + 0.625885,0.356259,0, + 0.623086,0.358847,0, + 0.623646,0.35227,0, + 0.625885,0.348491,0, + 0.625885,0.348491,0, + 0.628404,0.348491,0, + 0.628404,0.348491,0, + 0.627599,0.345692,0, + 0.627599,0.345692,0, + 0.625885,0.344992,0, + 0.625885,0.344992,0, + 0.625885,0.342823,0, + 0.625885,0.342823,0, + 0.628001,0.340094,0, + 0.628001,0.340094,0, + 0.632603,0.336874,0, + 0.632603,0.336874,0, + 0.632603,0.334215,0, + 0.632603,0.334215,0, + 0.634212,0.332466,0, + 0.634212,0.332466,0, + 0.638061,0.331556,0, + 0.638061,0.331556,0, + 0.64261,0.325538,0, + 0.64324,0.325538,0, + 0.645339,0.325538,0, + 0.645339,0.325538,0, + 0.646599,0.323159,0, + 0.646599,0.323159,0, + 0.649677,0.323159,0, + 0.649677,0.323159,0, + 0.651217,0.3205,0, + 0.651217,0.3205,0, + 0.654156,0.323159,0, + 0.654156,0.323159,0, + 0.657515,0.324349,0, + 0.657515,0.324349,0, + 0.658914,0.3205,0, + 0.658914,0.3205,0, + 0.67067,0.31854,0, + 0.67067,0.31854,0, + 0.67067,0.321829,0, + 0.67067,0.321829,0, + 0.67515,0.323159,0, + 0.67515,0.323159,0, + 0.67515,0.324349,0, + 0.67515,0.324349,0, + 0.67389,0.324349,0, + 0.67389,0.324349,0, + 0.67389,0.326518,0, + 0.67389,0.326518,0, + 0.67067,0.328547,0, + 0.67067,0.328547,0, + 0.668291,0.332011,0, + 0.668291,0.332011,0, + 0.671371,0.334215,0, + 0.671371,0.334215,0, + 0.671371,0.335965,0, + 0.671371,0.335965,0, + 0.668291,0.33642,0, + 0.668291,0.33642,0, + 0.667592,0.343907,0, + 0.667592,0.343907,0, + 0.669831,0.348491,0, + 0.669831,0.348491,0, + 0.669481,0.35059,0, + 0.669481,0.35059,0, + 0.666892,0.35059,0, + 0.666892,0.35059,0, + 0.663813,0.353214,0, + 0.663813,0.353214,0, + 0.660874,0.353599,0, + 0.660874,0.353599,0, + 0.658215,0.355349,0, + 0.658215,0.355349,0, + 0.652687,0.354474,0, + 0.652687,0.354474,0, + 0.651217,0.352829,0, + 0.651217,0.352829,0, + 0.649677,0.35227,0, + 0.649677,0.35227,0, + 0.649677,0.35059,0, + 0.649677,0.35059,0, + 0.643799,0.35003,0, + 0.643799,0.35003,0, + 0.638061,0.352549,0, + 0.638061,0.352549,0, + 0.635892,0.352549,0, + 0.635892,0.352549,0, + 0.635262,0.355349,0, + 0.645339,0.324349,0, + 0.645339,0.316161,0, + 0.645339,0.316161,0, + 0.64261,0.315601,0, + 0.64261,0.315601,0, + 0.645969,0.312942,0, + 0.645969,0.312942,0, + 0.649677,0.311822,0, + 0.649677,0.311822,0, + 0.652687,0.311822,0, + 0.652687,0.311822,0, + 0.654156,0.310003,0, + 0.654156,0.310003,0, + 0.654156,0.308184,0, + 0.654156,0.308184,0, + 0.652057,0.303215,0, + 0.652057,0.303215,0, + 0.64324,0.301606,0, + 0.64324,0.301606,0, + 0.647648,0.295868,0, + 0.647648,0.295868,0, + 0.645339,0.294608,0, + 0.645339,0.294608,0, + 0.645339,0.28733,0, + 0.645339,0.28733,0, + 0.654156,0.28733,0, + 0.654156,0.28733,0, + 0.654156,0.278093,0, + 0.644639,0.278093,0, + 0.654156,0.278093,0, + 0.686346,0.282711,0, + 0.70524,0.282711,0, + 0.70524,0.282711,0, + 0.70524,0.270325,0, + 0.70524,0.270325,0, + 0.686346,0.270325,0, + 0.686346,0.315601,0, + 0.685366,0.31854,0, + 0.685366,0.31854,0, + 0.684387,0.317841,0, + 0.684387,0.317841,0, + 0.684387,0.31952,0, + 0.684387,0.31952,0, + 0.67067,0.31854,0, + 0.668711,0.347092,0, + 0.671371,0.347092,0, + 0.671371,0.347092,0, + 0.67228,0.346811,0, + 0.67228,0.346811,0, + 0.67452,0.346811,0, + 0.67452,0.346811,0, + 0.67515,0.348491,0, + 0.67515,0.348491,0, + 0.678928,0.349541,0, + 0.678928,0.349541,0, + 0.678928,0.351902,0, + 0.678928,0.351902,0, + 0.682707,0.353214,0, + 0.682707,0.353214,0, + 0.687465,0.35227,0, + 0.687465,0.35227,0, + 0.688865,0.35143,0, + 0.688865,0.35143,0, + 0.691804,0.35227,0, + 0.691804,0.35227,0, + 0.694464,0.353214,0, + 0.694464,0.353214,0, + 0.695793,0.355069,0, + 0.695793,0.355069,0, + 0.696983,0.355803,0, + 0.696983,0.355803,0, + 0.698522,0.353652,0, + 0.698522,0.353652,0, + 0.697752,0.35031,0, + 0.697752,0.35031,0, + 0.696983,0.349016,0, + 0.696983,0.349016,0, + 0.698137,0.347651,0, + 0.698137,0.347651,0, + 0.698522,0.345692,0, + 0.698522,0.345692,0, + 0.696387,0.343907,0, + 0.696387,0.343907,0, + 0.693133,0.342823,0, + 0.693133,0.342823,0, + 0.694464,0.341458,0, + 0.694464,0.341458,0, + 0.692504,0.340794,0, + 0.692504,0.340794,0, + 0.691804,0.336874,0, + 0.691804,0.336874,0, + 0.688865,0.33642,0, + 0.688865,0.33642,0, + 0.686346,0.335545,0, + 0.686346,0.335545,0, + 0.684876,0.335545,0, + 0.684876,0.335545,0, + 0.682707,0.334215,0, + 0.682707,0.334215,0, + 0.683791,0.332466,0, + 0.683791,0.332466,0, + 0.680818,0.330576,0, + 0.680818,0.330576,0, + 0.67228,0.330576,0, + 0.67228,0.330576,0, + 0.668291,0.332011,0, + 0.687465,0.35227,0, + 0.688865,0.354911,0, + 0.688865,0.354911,0, + 0.688166,0.357168,0, + 0.688166,0.357168,0, + 0.685786,0.357868,0, + 0.685786,0.357868,0, + 0.684946,0.360667,0, + 0.684946,0.360667,0, + 0.684106,0.365145,0, + 0.684106,0.365145,0, + 0.683249,0.365565,0, + 0.683249,0.365565,0, + 0.682305,0.366825,0, + 0.682305,0.366825,0, + 0.687885,0.368504,0, + 0.687885,0.368504,0, + 0.688515,0.370254,0, + 0.688515,0.370254,0, + 0.686625,0.372353,0, + 0.686625,0.372353,0, + 0.685786,0.377195,0, + 0.685786,0.377195,0, + 0.681553,0.377195,0, + 0.681553,0.377195,0, + 0.6734,0.379202,0, + 0.6734,0.379202,0, + 0.677476,0.38177,0, + 0.677476,0.38177,0, + 0.676864,0.383161,0, + 0.676864,0.383161,0, + 0.6734,0.38502,0, + 0.6734,0.38502,0, + 0.67228,0.386664,0, + 0.67228,0.386664,0, + 0.6734,0.387714,0, + 0.6734,0.387714,0, + 0.67228,0.389568,0, + 0.67228,0.389568,0, + 0.677476,0.390621,0, + 0.677476,0.390621,0, + 0.678368,0.389102,0, + 0.678368,0.389102,0, + 0.679838,0.390621,0, + 0.679838,0.390621,0, + 0.679348,0.393185,0, + 0.679348,0.393185,0, + 0.682777,0.394536,0, + 0.682777,0.394536,0, + 0.683791,0.396181,0, + 0.683791,0.396181,0, + 0.682707,0.398473,0, + 0.682707,0.398473,0, + 0.683285,0.400729,0, + 0.683285,0.400729,0, + 0.689845,0.401936,0, + 0.689845,0.401936,0, + 0.69476,0.401936,0, + 0.69476,0.401936,0, + 0.696387,0.405164,0, + 0.696387,0.405164,0, + 0.698137,0.406179,0, + 0.698137,0.406179,0, + 0.697752,0.40725,0, + 0.697752,0.40725,0, + 0.695574,0.408042,0, + 0.695574,0.408042,0, + 0.69476,0.409792,0, + 0.69476,0.409792,0, + 0.695793,0.410981,0, + 0.695793,0.410981,0, + 0.697262,0.410981,0, + 0.697262,0.410981,0, + 0.697752,0.409792,0, + 0.697752,0.409792,0, + 0.7058,0.410089,0, + 0.7058,0.410089,0, + 0.708459,0.411856,0, + 0.708459,0.411856,0, + 0.710419,0.41434,0, + 0.710419,0.41434,0, + 0.712378,0.41399,0, + 0.712378,0.41399,0, + 0.713498,0.417629,0, + 0.713498,0.417629,0, + 0.719795,0.417629,0, + 0.719795,0.417629,0, + 0.720635,0.416545,0, + 0.720635,0.416545,0, + 0.725954,0.417629,0, + 0.725954,0.417629,0, + 0.728192,0.417087,0, + 0.728192,0.417087,0, + 0.730712,0.418119,0, + 0.730712,0.418119,0, + 0.733931,0.417087,0, + 0.733931,0.417087,0, + 0.73855,0.419728,0, + 0.73855,0.419728,0, + 0.733371,0.421268,0, + 0.733371,0.421268,0, + 0.73624,0.423018,0, + 0.73624,0.423018,0, + 0.73624,0.424837,0, + 0.73624,0.424837,0, + 0.734805,0.425817,0, + 0.734805,0.425817,0, + 0.73855,0.426971,0, + 0.73855,0.426971,0, + 0.73771,0.428826,0, + 0.73771,0.428826,0, + 0.733371,0.429316,0, + 0.733371,0.429316,0, + 0.733371,0.431485,0, + 0.733371,0.431485,0, + 0.730712,0.431485,0, + 0.730712,0.431485,0, + 0.729452,0.435054,0, + 0.729452,0.435054,0, + 0.728192,0.435054,0, + 0.728192,0.435054,0, + 0.725954,0.436821,0, + 0.725954,0.436821,0, + 0.728822,0.437695,0, + 0.728822,0.437695,0, + 0.729452,0.439401,0, + 0.729452,0.439401,0, + 0.725954,0.441325,0, + 0.725954,0.441325,0, + 0.720635,0.441325,0, + 0.720635,0.441325,0, + 0.719096,0.441815,0, + 0.719096,0.441815,0, + 0.719096,0.443241,0, + 0.719096,0.443241,0, + 0.723294,0.44445,0, + 0.723294,0.44445,0, + 0.723294,0.44583,0, + 0.723294,0.44583,0, + 0.719795,0.44674,0, + 0.719795,0.44674,0, + 0.722175,0.44842,0, + 0.722175,0.44842,0, + 0.717416,0.449679,0, + 0.717416,0.449679,0, + 0.716646,0.451219,0, + 0.716646,0.451219,0, + 0.716646,0.452618,0, + 0.716646,0.452618,0, + 0.727388,0.453528,0, + 0.727388,0.453528,0, + 0.686625,0.453528,0, + 0.727388,0.453528,0, + 0.727388,0.456957,0, + 0.727388,0.456957,0, + 0.729452,0.456957,0, + 0.729452,0.456957,0, + 0.730712,0.458497,0, + 0.730712,0.458497,0, + 0.730712,0.459896,0, + 0.730712,0.459896,0, + 0.730082,0.460456,0, + 0.730082,0.460456,0, + 0.727388,0.460456,0, + 0.727388,0.460456,0, + 0.727388,0.480679,0, + 0.727388,0.480679,0, + 0.77032,0.480679,0, + 0.77032,0.480679,0, + 0.77032,0.498384,0, + 0.707143,0.410981,0, + 0.710419,0.408042,0, + 0.710419,0.408042,0, + 0.710419,0.404452,0, + 0.710419,0.404452,0, + 0.707759,0.40282,0, + 0.707759,0.40282,0, + 0.708459,0.401324,0, + 0.708459,0.401324,0, + 0.709439,0.400135,0, + 0.709439,0.400135,0, + 0.710419,0.398035,0, + 0.710419,0.398035,0, + 0.712938,0.399172,0, + 0.712938,0.399172,0, + 0.716646,0.395586,0, + 0.716646,0.395586,0, + 0.722314,0.389102,0, + 0.722314,0.389102,0, + 0.725114,0.391903,0, + 0.725114,0.391903,0, + 0.725954,0.390095,0, + 0.725954,0.390095,0, + 0.730712,0.389862,0, + 0.730712,0.389862,0, + 0.732321,0.390095,0, + 0.732321,0.390095,0, + 0.733931,0.388239,0, + 0.734805,0.387714,0, + 0.735523,0.387583,0, + 0.735523,0.387583,0, + 0.73596,0.386927,0, + 0.73596,0.386927,0, + 0.740229,0.386664,0, + 0.740229,0.386664,0, + 0.741489,0.38502,0, + 0.741489,0.38502,0, + 0.740229,0.383161,0, + 0.740229,0.383161,0, + 0.736678,0.383161,0, + 0.736678,0.383161,0, + 0.736678,0.380025,0, + 0.736678,0.380025,0, + 0.73596,0.378701,0, + 0.73596,0.378701,0, + 0.729452,0.379363,0, + 0.729452,0.379363,0, + 0.728192,0.375926,0, + 0.728192,0.375926,0, + 0.728822,0.373928,0, + 0.728822,0.373928,0, + 0.725114,0.373928,0, + 0.725114,0.373928,0, + 0.720635,0.373928,0, + 0.720635,0.373928,0, + 0.720635,0.373141,0, + 0.720635,0.373141,0, + 0.722314,0.372353,0, + 0.722314,0.372353,0, + 0.723714,0.368924,0, + 0.723714,0.368924,0, + 0.722314,0.367665,0, + 0.722314,0.367665,0, + 0.722314,0.365565,0, + 0.722314,0.365565,0, + 0.717416,0.363396,0, + 0.717416,0.363396,0, + 0.716646,0.362486,0, + 0.716646,0.362486,0, + 0.713498,0.362486,0, + 0.713498,0.362486,0, + 0.711678,0.361157,0, + 0.711678,0.361157,0, + 0.709439,0.360667,0, + 0.709439,0.360667,0, + 0.708459,0.361157,0, + 0.708459,0.361157,0, + 0.70454,0.360107,0, + 0.70454,0.360107,0, + 0.70356,0.35771,0, + 0.70356,0.35771,0, + 0.70454,0.356259,0, + 0.70454,0.356259,0, + 0.707143,0.355069,0, + 0.707143,0.355069,0, + 0.707759,0.35199,0, + 0.707759,0.35199,0, + 0.710419,0.35031,0, + 0.710419,0.35031,0, + 0.710559,0.348334,0, + 0.710559,0.348334,0, + 0.712938,0.347651,0, + 0.712938,0.347651,0, + 0.715072,0.346952,0, + 0.715072,0.346952,0, + 0.712938,0.3448,0, + 0.712938,0.3448,0, + 0.708459,0.3448,0, + 0.708459,0.3448,0, + 0.70454,0.344992,0, + 0.70454,0.344992,0, + 0.70524,0.340794,0, + 0.70524,0.340794,0, + 0.70713,0.338834,0, + 0.70713,0.338834,0, + 0.709088,0.338484,0, + 0.709088,0.338484,0, + 0.708949,0.336647,0, + 0.708949,0.336647,0, + 0.7065,0.337565,0, + 0.7065,0.337565,0, + 0.7065,0.335545,0, + 0.7065,0.335545,0, + 0.70405,0.330576,0, + 0.70405,0.330576,0, + 0.698522,0.326518,0, + 0.698522,0.326518,0, + 0.696387,0.325538,0, + 0.696387,0.325538,0, + 0.69476,0.326028,0, + 0.69476,0.326028,0, + 0.692303,0.324349,0, + 0.692303,0.324349,0, + 0.692303,0.322494,0, + 0.692303,0.322494,0, + 0.694464,0.322424,0, + 0.694464,0.322424,0, + 0.694464,0.320185,0, + 0.694464,0.320185,0, + 0.695793,0.320185,0, + 0.695793,0.320185,0, + 0.696983,0.317071,0, + 0.696983,0.317071,0, + 0.694464,0.316161,0, + 0.694464,0.316161,0, + 0.693484,0.315601,0, + 0.693484,0.315601,0, + 0.690335,0.316161,0, + 0.690335,0.316161,0, + 0.689565,0.314272,0, + 0.689565,0.314272,0, + 0.691804,0.312382,0, + 0.691804,0.312382,0, + 0.68995,0.310003,0, + 0.68995,0.310003,0, + 0.694464,0.3057,0, + 0.694464,0.3057,0, + 0.698329,0.3057,0, + 0.698329,0.3057,0, + 0.699782,0.308184,0, + 0.699782,0.308184,0, + 0.701286,0.309093,0, + 0.701286,0.309093,0, + 0.701286,0.3057,0, + 0.701286,0.3057,0, + 0.701286,0.304125,0, + 0.701286,0.304125,0, + 0.702861,0.293488,0, + 0.702861,0.293488,0, + 0.7065,0.28649,0, + 0.7065,0.28649,0, + 0.707452,0.283411,0, + 0.707452,0.283411,0, + 0.710699,0.278093,0, + 0.710699,0.278093,0, + 0.711749,0.273614,0, + 0.711749,0.273614,0, + 0.714005,0.271375,0, + 0.714005,0.271375,0, + 0.716646,0.271375,0, + 0.716646,0.271375,0, + 0.717031,0.273614,0, + 0.717031,0.273614,0, + 0.718816,0.274734,0, + 0.718816,0.274734,0, + 0.721475,0.273614,0, + 0.721475,0.273614,0, + 0.720145,0.271375,0, + 0.720145,0.271375,0, + 0.72081,0.267316,0, + 0.72081,0.267316,0, + 0.721475,0.265917,0, + 0.721475,0.265917,0, + 0.724694,0.265917,0, + 0.724694,0.265917,0, + 0.726653,0.267876,0, + 0.726653,0.267876,0, + 0.726653,0.269346,0, + 0.726653,0.269346,0, + 0.724694,0.274174,0, + 0.724694,0.274174,0, + 0.72081,0.278093,0, + 0.72081,0.278093,0, + 0.72081,0.281592,0, + 0.72081,0.281592,0, + 0.722752,0.284951,0, + 0.722752,0.284951,0, + 0.721781,0.28859,0, + 0.721781,0.28859,0, + 0.721475,0.290969,0, + 0.721475,0.290969,0, + 0.722267,0.292788,0, + 0.722267,0.292788,0, + 0.725673,0.292788,0, + 0.725673,0.292788,0, + 0.725673,0.293488,0, + 0.725673,0.293488,0, + 0.728192,0.294608,0, + 0.728192,0.294608,0, + 0.734071,0.299926,0, + 0.734071,0.299926,0, + 0.73575,0.303215,0, + 0.73575,0.303215,0, + 0.741208,0.3057,0, + 0.741208,0.3057,0, + 0.741208,0.307851,0, + 0.741208,0.307851,0, + 0.743588,0.309093,0, + 0.743588,0.309093,0, + 0.746527,0.308638,0, + 0.746527,0.308638,0, + 0.745967,0.312942,0, + 0.745967,0.312942,0, + 0.745058,0.316161,0, + 0.745058,0.316161,0, + 0.744288,0.317841,0, + 0.744288,0.317841,0, + 0.745512,0.31903,0, + 0.745512,0.31903,0, + 0.744288,0.320185,0, + 0.744288,0.320185,0, + 0.744288,0.321829,0, + 0.744288,0.321829,0, + 0.740369,0.322494,0, + 0.740369,0.322494,0, + 0.734071,0.323754,0, + 0.734071,0.323754,0, + 0.734071,0.324349,0, + 0.734071,0.324349,0, + 0.730432,0.325188,0, + 0.730432,0.325188,0, + 0.721871,0.328547,0, + 0.721871,0.328547,0, + 0.721871,0.330576,0, + 0.721871,0.330576,0, + 0.722314,0.331556,0, + 0.722314,0.331556,0, + 0.724694,0.332011,0, + 0.724694,0.332011,0, + 0.718816,0.335545,0, + 0.718816,0.335545,0, + 0.717031,0.338834,0, + 0.717031,0.338834,0, + 0.719866,0.338834,0, + 0.719866,0.338834,0, + 0.720145,0.340163,0, + 0.720145,0.340163,0, + 0.718816,0.341458,0, + 0.718816,0.341458,0, + 0.718816,0.343907,0, + 0.718816,0.343907,0, + 0.719866,0.343365,0, + 0.719866,0.343365,0, + 0.720477,0.3448,0, + 0.720477,0.3448,0, + 0.721871,0.344992,0, + 0.721871,0.344992,0, + 0.722093,0.347092,0, + 0.722093,0.347092,0, + 0.71948,0.349016,0, + 0.71948,0.349016,0, + 0.717416,0.348334,0, + 0.717416,0.348334,0, + 0.715072,0.346952,0, + 0.724694,0.332011,0, + 0.726933,0.33334,0, + 0.726933,0.33334,0, + 0.730432,0.331066,0, + 0.730432,0.331066,0, + 0.732252,0.329562,0, + 0.732252,0.329562,0, + 0.73722,0.327533,0, + 0.73722,0.327533,0, + 0.742329,0.326028,0, + 0.742329,0.326028,0, + 0.743588,0.326518,0, + 0.743588,0.326518,0, + 0.744288,0.321829,0, + 0.743588,0.326518,0, + 0.748067,0.326518,0, + 0.748067,0.326518,0, + 0.749746,0.327533,0, + 0.749746,0.327533,0, + 0.753945,0.32678,0, + 0.753945,0.32678,0, + 0.756044,0.326028,0, + 0.756044,0.326028,0, + 0.760243,0.328547,0, + 0.760243,0.328547,0, + 0.761782,0.330279,0, + 0.761782,0.330279,0, + 0.764441,0.329562,0, + 0.764441,0.329562,0, + 0.765841,0.330576,0, + 0.765841,0.330576,0, + 0.76724,0.328547,0, + 0.76724,0.328547,0, + 0.766541,0.327533,0, + 0.766541,0.327533,0, + 0.771159,0.327533,0, + 0.771159,0.327533,0, + 0.76885,0.326028,0, + 0.76885,0.326028,0, + 0.76885,0.324349,0, + 0.76885,0.324349,0, + 0.765141,0.324349,0, + 0.765141,0.324349,0, + 0.763112,0.322161,0, + 0.763112,0.322161,0, + 0.763112,0.320185,0, + 0.763112,0.320185,0, + 0.761782,0.318435,0, + 0.761782,0.318435,0, + 0.761782,0.316161,0, + 0.761782,0.316161,0, + 0.761013,0.315216,0, + 0.761013,0.315216,0, + 0.758983,0.315601,0, + 0.758983,0.315601,0, + 0.758983,0.312942,0, + 0.758983,0.312942,0, + 0.758143,0.310003,0, + 0.758143,0.310003,0, + 0.756044,0.310003,0, + 0.756044,0.310003,0, + 0.756044,0.314272,0, + 0.756044,0.314272,0, + 0.754994,0.314272,0, + 0.754994,0.314272,0, + 0.753945,0.312382,0, + 0.753945,0.312382,0, + 0.751845,0.314272,0, + 0.751845,0.314272,0, + 0.752895,0.316616,0, + 0.752895,0.316616,0, + 0.758143,0.317001,0, + 0.758143,0.317001,0, + 0.756044,0.31931,0, + 0.756044,0.31931,0, + 0.748906,0.31931,0, + 0.748906,0.31931,0, + 0.748906,0.321304,0, + 0.748906,0.321304,0, + 0.744288,0.321829,0, + 0.756044,0.310003,0, + 0.756044,0.306776,0, + 0.756044,0.306776,0, + 0.755519,0.3057,0, + 0.755519,0.3057,0, + 0.749886,0.299926,0, + 0.749886,0.299926,0, + 0.749886,0.290969,0, + 0.749886,0.265917,0, + 0.757094,0.265917,0, + 0.762447,0.265917,0, + 0.762447,0.290969,0, + 0.762447,0.290969,0, + 0.749886,0.290969,0, + 0.76948,0.247582,0, + 0.757094,0.265917,0, + 0.811467,0.462975,0, + 0.811467,0.498384,0, + 0.811467,0.462975,0, + 0.816225,0.460456,0, + 0.816225,0.460456,0, + 0.816225,0.456957,0, + 0.816225,0.456957,0, + 0.808668,0.455243,0, + 0.808668,0.455243,0, + 0.808668,0.453528,0, + 0.808668,0.453528,0, + 0.806428,0.452618,0, + 0.806428,0.452618,0, + 0.806428,0.450449,0, + 0.806428,0.450449,0, + 0.809787,0.44905,0, + 0.809787,0.44905,0, + 0.810347,0.44716,0, + 0.810347,0.44716,0, + 0.812447,0.44632,0, + 0.812447,0.44632,0, + 0.808668,0.44514,0, + 0.808668,0.44514,0, + 0.804889,0.444895,0, + 0.804889,0.444895,0, + 0.802929,0.443241,0, + 0.802929,0.443241,0, + 0.802929,0.442542,0, + 0.802929,0.442542,0, + 0.798031,0.441815,0, + 0.798031,0.441815,0, + 0.793692,0.441325,0, + 0.793692,0.441325,0, + 0.793692,0.440363,0, + 0.793692,0.440363,0, + 0.795862,0.440232,0, + 0.795862,0.440232,0, + 0.795862,0.435937,0, + 0.795862,0.435937,0, + 0.792852,0.435054,0, + 0.792852,0.435054,0, + 0.795862,0.4304,0, + 0.795862,0.4304,0, + 0.792852,0.427899,0, + 0.792852,0.427899,0, + 0.80048,0.426971,0, + 0.80048,0.426971,0, + 0.795862,0.425817,0, + 0.795862,0.425817,0, + 0.794357,0.423927,0, + 0.794357,0.423927,0, + 0.795109,0.422178,0, + 0.795109,0.422178,0, + 0.793692,0.419728,0, + 0.793692,0.419728,0, + 0.789634,0.418609,0, + 0.789634,0.418609,0, + 0.789634,0.416545,0, + 0.789634,0.416545,0, + 0.792852,0.41581,0, + 0.792852,0.41581,0, + 0.792852,0.41511,0, + 0.792852,0.41511,0, + 0.790333,0.41434,0, + 0.790333,0.41434,0, + 0.791663,0.413098,0, + 0.791663,0.413098,0, + 0.789634,0.410981,0, + 0.789634,0.410981,0, + 0.784735,0.41399,0, + 0.784735,0.41399,0, + 0.783056,0.413098,0, + 0.783056,0.413098,0, + 0.783056,0.411856,0, + 0.783056,0.411856,0, + 0.780256,0.410386,0, + 0.780256,0.410386,0, + 0.779137,0.408042,0, + 0.779137,0.408042,0, + 0.776618,0.410386,0, + 0.776618,0.410386,0, + 0.774658,0.409512,0, + 0.774658,0.409512,0, + 0.771159,0.409512,0, + 0.771159,0.409512,0, + 0.770005,0.40725,0, + 0.770005,0.40725,0, + 0.770582,0.405672,0, + 0.770582,0.405672,0, + 0.767941,0.404452,0, + 0.767941,0.404452,0, + 0.767941,0.400135,0, + 0.767941,0.400135,0, + 0.765141,0.399601,0, + 0.765141,0.399601,0, + 0.767941,0.398035,0, + 0.767941,0.398035,0, + 0.770005,0.398035,0, + 0.770005,0.398035,0, + 0.772908,0.396181,0, + 0.772908,0.396181,0, + 0.775638,0.396181,0, + 0.775638,0.396181,0, + 0.772908,0.393861,0, + 0.772908,0.393861,0, + 0.773679,0.393185,0, + 0.773679,0.393185,0, + 0.771159,0.390999,0, + 0.771159,0.390999,0, + 0.771159,0.389862,0, + 0.771159,0.389862,0, + 0.771457,0.389102,0, + 0.771457,0.389102,0, + 0.772419,0.387648,0, + 0.772419,0.387648,0, + 0.769261,0.386664,0, + 0.769261,0.386664,0, + 0.761782,0.387714,0, + 0.761782,0.387714,0, + 0.761013,0.389167,0, + 0.761013,0.389167,0, + 0.754994,0.390095,0, + 0.754994,0.390095,0, + 0.748067,0.387255,0, + 0.748067,0.387255,0, + 0.747367,0.386664,0, + 0.747367,0.386664,0, + 0.744848,0.386664,0, + 0.744848,0.386664,0, + 0.743938,0.38502,0, + 0.743938,0.38502,0, + 0.741489,0.38502,0, + 0.80048,0.426971,0, + 0.80048,0.425327,0, + 0.80048,0.425327,0, + 0.803069,0.424837,0, + 0.803069,0.424837,0, + 0.803069,0.422178,0, + 0.803069,0.422178,0, + 0.804469,0.422143,0, + 0.804469,0.422143,0, + 0.804469,0.420953,0, + 0.804469,0.420953,0, + 0.803769,0.420498,0, + 0.803769,0.420498,0, + 0.806428,0.418408,0, + 0.806428,0.418408,0, + 0.803069,0.413544,0, + 0.803069,0.413544,0, + 0.805099,0.412477,0, + 0.805099,0.412477,0, + 0.811047,0.41434,0, + 0.811047,0.41434,0, + 0.812027,0.413011,0, + 0.812027,0.413011,0, + 0.814685,0.413409,0, + 0.814685,0.413409,0, + 0.815665,0.41511,0, + 0.815665,0.41511,0, + 0.821124,0.417087,0, + 0.821124,0.417087,0, + 0.824623,0.415976,0, + 0.824623,0.415976,0, + 0.824623,0.414725,0, + 0.824623,0.414725,0, + 0.829101,0.414259,0, + 0.829101,0.414259,0, + 0.830081,0.409949,0, + 0.830081,0.409949,0, + 0.826862,0.410981,0, + 0.826862,0.410981,0, + 0.825322,0.410465,0, + 0.825322,0.410465,0, + 0.824063,0.408381,0, + 0.824063,0.408381,0, + 0.826092,0.40725,0, + 0.826092,0.40725,0, + 0.825322,0.406461,0, + 0.825322,0.406461,0, + 0.819724,0.406856,0, + 0.819724,0.406856,0, + 0.821124,0.402293,0, + 0.821124,0.402293,0, + 0.822873,0.401534,0, + 0.822873,0.401534,0, + 0.824063,0.399868,0, + 0.824063,0.399868,0, + 0.819724,0.399601,0, + 0.819724,0.399601,0, + 0.815176,0.398035,0, + 0.815176,0.398035,0, + 0.815665,0.396181,0, + 0.815665,0.396181,0, + 0.815665,0.395021,0, + 0.815665,0.395021,0, + 0.810347,0.393861,0, + 0.810347,0.393861,0, + 0.806428,0.392092,0, + 0.806428,0.392092,0, + 0.80048,0.392092,0, + 0.80048,0.392092,0, + 0.799431,0.389481,0, + 0.799431,0.389481,0, + 0.80048,0.388675,0, + 0.80048,0.388675,0, + 0.797331,0.387648,0, + 0.797331,0.387648,0, + 0.801774,0.38502,0, + 0.801774,0.38502,0, + 0.808072,0.385842,0, + 0.808072,0.385842,0, + 0.813006,0.386334,0, + 0.813006,0.386334,0, + 0.815665,0.388239,0, + 0.815665,0.388239,0, + 0.818395,0.388375,0, + 0.818395,0.388375,0, + 0.821894,0.386795,0, + 0.821894,0.386795,0, + 0.824063,0.387286,0, + 0.824063,0.387286,0, + 0.825707,0.386795,0, + 0.825707,0.386795,0, + 0.830081,0.387714,0, + 0.830081,0.387714,0, + 0.830081,0.389167,0, + 0.830081,0.389167,0, + 0.83386,0.392976,0, + 0.83386,0.392976,0, + 0.83386,0.395021,0, + 0.83386,0.395021,0, + 0.8326,0.395601,0, + 0.8326,0.395601,0, + 0.836659,0.397108,0, + 0.836659,0.397108,0, + 0.843377,0.398035,0, + 0.843377,0.398035,0, + 0.850095,0.395311,0, + 0.850095,0.395311,0, + 0.853873,0.386664,0, + 0.853873,0.386664,0, + 0.857932,0.385842,0, + 0.857932,0.385842,0, + 0.861851,0.38409,0, + 0.861851,0.38409,0, + 0.862691,0.381593,0, + 0.862691,0.381593,0, + 0.86703,0.381593,0, + 0.86703,0.381593,0, + 0.868009,0.381593,0, + 0.868009,0.381593,0, + 0.871508,0.383161,0, + 0.871508,0.383161,0, + 0.872908,0.383161,0, + 0.872908,0.383161,0, + 0.872908,0.380681,0, + 0.872908,0.380681,0, + 0.872207,0.380681,0, + 0.872207,0.380681,0, + 0.869759,0.374927,0, + 0.869759,0.374927,0, + 0.869129,0.373928,0, + 0.869129,0.373928,0, + 0.86486,0.374427,0, + 0.86486,0.374427,0, + 0.862691,0.373141,0, + 0.862691,0.373141,0, + 0.863776,0.368924,0, + 0.863776,0.368924,0, + 0.862271,0.366615,0, + 0.862271,0.366615,0, + 0.859892,0.36777,0, + 0.859892,0.36777,0, + 0.857932,0.365565,0, + 0.857932,0.365565,0, + 0.854573,0.364481,0, + 0.854573,0.364481,0, + 0.854573,0.363396,0, + 0.854573,0.363396,0, + 0.852893,0.363396,0, + 0.852893,0.363396,0, + 0.851214,0.364481,0, + 0.851214,0.364481,0, + 0.850095,0.362767,0, + 0.850095,0.362767,0, + 0.845056,0.360527,0, + 0.845056,0.360527,0, + 0.843937,0.358988,0, + 0.843937,0.358988,0, + 0.843937,0.340163,0, + 0.843937,0.340163,0, + 0.853733,0.340163,0, + 0.852893,0.498384,0, + 0.852893,0.474032,0, + 0.852893,0.474032,0, + 0.811536,0.464655,0, + 0.894741,0.498384,0, + 0.894741,0.464655,0, + 0.894741,0.464655,0, + 0.884244,0.464655,0, + 0.884244,0.464655,0, + 0.86577,0.457657,0, + 0.86577,0.457657,0, + 0.86577,0.44573,0, + 0.86577,0.44573,0, + 0.868709,0.411856,0, + 0.868709,0.411856,0, + 0.86486,0.409949,0, + 0.86486,0.409949,0, + 0.86577,0.409214,0, + 0.86577,0.409214,0, + 0.863776,0.408042,0, + 0.863776,0.408042,0, + 0.865315,0.406461,0, + 0.865315,0.406461,0, + 0.863233,0.405062,0, + 0.863233,0.405062,0, + 0.862691,0.403214,0, + 0.862691,0.403214,0, + 0.867519,0.403214,0, + 0.867519,0.403214,0, + 0.868009,0.402293,0, + 0.868009,0.402293,0, + 0.861081,0.399601,0, + 0.861081,0.399601,0, + 0.861081,0.398818,0, + 0.861081,0.398818,0, + 0.864545,0.398035,0, + 0.864545,0.398035,0, + 0.864545,0.397108,0, + 0.864545,0.397108,0, + 0.869129,0.397108,0, + 0.869129,0.397108,0, + 0.873888,0.397572,0, + 0.873888,0.397572,0, + 0.873888,0.393861,0, + 0.873888,0.393861,0, + 0.869129,0.395021,0, + 0.869129,0.395021,0, + 0.869129,0.393523,0, + 0.869129,0.393523,0, + 0.86577,0.392976,0, + 0.86577,0.392976,0, + 0.861851,0.39043,0, + 0.861851,0.39043,0, + 0.862271,0.389078,0, + 0.862271,0.389078,0, + 0.864274,0.388239,0, + 0.864274,0.388239,0, + 0.864545,0.385431,0, + 0.864545,0.385431,0, + 0.861851,0.38409,0, + 0.853733,0.340163,0, + 0.853733,0.325188,0, + 0.853733,0.325188,0, + 0.840298,0.325188,0, + 0.840298,0.325188,0, + 0.840298,0.314272,0, + 0.840298,0.314272,0, + 0.853733,0.314272,0, + 0.853733,0.314272,0, + 0.853733,0.257939,0, + 0.771159,0.327533,0, + 0.772699,0.324768,0, + 0.772699,0.324768,0, + 0.773819,0.324349,0, + 0.773819,0.324349,0, + 0.773819,0.321007,0, + 0.773819,0.321007,0, + 0.770005,0.317298,0, + 0.770005,0.317298,0, + 0.771159,0.315881,0, + 0.771159,0.315881,0, + 0.773819,0.315881,0, + 0.773819,0.315881,0, + 0.774518,0.313327,0, + 0.774518,0.313327,0, + 0.776057,0.312942,0, + 0.776057,0.312942,0, + 0.774518,0.31079,0, + 0.774518,0.31079,0, + 0.776057,0.310003,0, + 0.776057,0.310003,0, + 0.777457,0.308638,0, + 0.777457,0.308638,0, + 0.780117,0.308638,0, + 0.780117,0.308638,0, + 0.778787,0.306776,0, + 0.778787,0.306776,0, + 0.774168,0.304125,0, + 0.774168,0.304125,0, + 0.771159,0.303215,0, + 0.771159,0.303215,0, + 0.770582,0.299926,0, + 0.770582,0.299926,0, + 0.774168,0.293488,0, + 0.774168,0.293488,0, + 0.771929,0.289989,0, + 0.771929,0.289989,0, + 0.774168,0.28789,0, + 0.774168,0.28789,0, + 0.776057,0.280752,0, + 0.776057,0.280752,0, + 0.773819,0.279213,0, + 0.773819,0.279213,0, + 0.773819,0.277113,0, + 0.773819,0.277113,0, + 0.771911,0.275854,0, + 0.771911,0.275854,0, + 0.770871,0.278443,0, + 0.770871,0.278443,0, + 0.771391,0.279982,0, + 0.771391,0.279982,0, + 0.771391,0.281592,0, + 0.771391,0.281592,0, + 0.76948,0.281592,0, + 0.76948,0.281592,0, + 0.771159,0.284951,0, + 0.771159,0.284951,0, + 0.771911,0.286105,0, + 0.771911,0.286105,0, + 0.77032,0.28859,0, + 0.77032,0.28859,0, + 0.77032,0.294608,0, + 0.77032,0.294608,0, + 0.76948,0.295588,0, + 0.76948,0.295588,0, + 0.764441,0.291878,0, + 0.764441,0.291878,0, + 0.759998,0.293138,0, + 0.759998,0.293138,0, + 0.761782,0.296707,0, + 0.761782,0.296707,0, + 0.76089,0.301571,0, + 0.76089,0.301571,0, + 0.759123,0.303215,0, + 0.759123,0.303215,0, + 0.756044,0.306776,0, + 0.780117,0.308638,0, + 0.782076,0.308472,0, + 0.782076,0.308472,0, + 0.782076,0.310003,0, + 0.782076,0.310003,0, + 0.781096,0.31079,0, + 0.781096,0.31079,0, + 0.784455,0.312942,0, + 0.784455,0.312942,0, + 0.786134,0.311866,0, + 0.786134,0.311866,0, + 0.790613,0.312137,0, + 0.790613,0.312137,0, + 0.791733,0.313327,0, + 0.791733,0.313327,0, + 0.794952,0.312404,0, + 0.794952,0.312404,0, + 0.795932,0.310003,0, + 0.795932,0.310003,0, + 0.797471,0.308472,0, + 0.797471,0.308472,0, + 0.79915,0.308472,0, + 0.79915,0.308472,0, + 0.79915,0.299139,0, + 0.79915,0.299139,0, + 0.805309,0.289779,0, + 0.805309,0.289779,0, + 0.812027,0.289779,0, + 0.812027,0.289779,0, + 0.812027,0.265917,0, + 0.812027,0.265917,0, + 0.782775,0.265917,0, + 0.782775,0.265917,0, + 0.782775,0.265217,0, + 0.782775,0.265217,0, + 0.780117,0.265217,0, + 0.780117,0.265217,0, + 0.779452,0.266617,0, + 0.779452,0.266617,0, + 0.776758,0.267316,0, + 0.776758,0.267316,0, + 0.776057,0.265917,0, + 0.776057,0.265917,0, + 0.778787,0.262138,0, + 0.778787,0.262138,0, + 0.779452,0.258639,0, + 0.779452,0.258639,0, + 0.782076,0.25542,0, + 0.782076,0.25542,0, + 0.786835,0.252901,0, + 0.786835,0.252901,0, + 0.788374,0.251361,0, + 0.789073,0.252131,0, + 0.791173,0.25416,0, + 0.791173,0.25416,0, + 0.791173,0.262978,0, + 0.791173,0.262978,0, + 0.802929,0.262978,0, + 0.802929,0.262978,0, + 0.802929,0.25416,0, + 0.802929,0.25416,0, + 0.80153,0.252131,0, + 0.80153,0.252131,0, + 0.80041,0.250101,0, + 0.80041,0.250101,0, + 0.802929,0.245903,0, + 0.802929,0.245903,0, + 0.804609,0.245903,0, + 0.804609,0.245903,0, + 0.804609,0.240725,0, + 0.804609,0.240725,0, + 0.809367,0.240725,0, + 0.809367,0.240725,0, + 0.809367,0.239185,0, + 0.809367,0.239185,0, + 0.810907,0.239185,0, + 0.810907,0.239185,0, + 0.810907,0.234707,0, + 0.812027,0.234707,0, + 0.822523,0.234707,0, + 0.822523,0.234707,0, + 0.822523,0.228409,0, + 0.822523,0.228409,0, + 0.820984,0.228409,0, + 0.853733,0.257939,0, + 0.844076,0.245903,0, + 0.844076,0.245903,0, + 0.844076,0.240725,0, + 0.844076,0.240725,0, + 0.847575,0.240725,0, + 0.847575,0.240725,0, + 0.847575,0.228409,0, + 0.847575,0.228409,0, + 0.852894,0.228409,0, + 0.852894,0.228409,0, + 0.852894,0.210214,0, + 0.852894,0.210214,0, + 0.855273,0.207695,0, + 0.855273,0.207695,0, + 0.857512,0.207695,0, + 0.857512,0.207695,0, + 0.857512,0.161089,0, + 0.857512,0.161089,0, + 0.852894,0.15983,0, + 0.936308,0.464655,0, + 0.936308,0.498384,0, + 0.937287,0.464655,0, + 0.939386,0.461156,0, + 0.939386,0.461156,0, + 0.939386,0.458706,0, + 0.939386,0.458706,0, + 0.916713,0.454385,0, + 0.916713,0.454385,0, + 0.903698,0.456546,0, + 0.903698,0.456546,0, + 0.894741,0.4561,0, + 0.894741,0.4561,0, + 0.894741,0.454385,0, + 0.894741,0.454385,0, + 0.899219,0.452618,0, + 0.899219,0.452618,0, + 0.891662,0.420953,0, + 0.891662,0.420953,0, + 0.893901,0.420498,0, + 0.893901,0.420498,0, + 0.89698,0.420953,0, + 0.89698,0.420953,0, + 0.899219,0.420498,0, + 0.899219,0.420498,0, + 0.900899,0.420953,0, + 0.900899,0.420953,0, + 0.904398,0.420953,0, + 0.904398,0.420953,0, + 0.906357,0.420498,0, + 0.906357,0.420498,0, + 0.906357,0.418408,0, + 0.906357,0.418408,0, + 0.902648,0.417087,0, + 0.902648,0.417087,0, + 0.902648,0.416098,0, + 0.902648,0.416098,0, + 0.906357,0.415976,0, + 0.906357,0.415976,0, + 0.907197,0.41511,0, + 0.907197,0.41511,0, + 0.907197,0.413676,0, + 0.907197,0.413676,0, + 0.893901,0.412477,0, + 0.893901,0.412477,0, + 0.890822,0.376902,0, + 0.890822,0.376902,0, + 0.881725,0.376902,0, + 0.881725,0.376902,0, + 0.873888,0.369624,0, + 0.873888,0.369624,0, + 0.868709,0.367192,0, + 0.868709,0.367192,0, + 0.86577,0.368408,0, + 0.86577,0.368408,0, + 0.86381,0.367192,0, + 0.86381,0.367192,0, + 0.862271,0.366615,0, + 0.890822,0.376902,0, + 0.903418,0.372563,0, + 0.903418,0.372563,0, + 0.904503,0.368924,0, + 0.904503,0.368924,0, + 0.901738,0.3678,0, + 0.901738,0.3678,0, + 0.899219,0.36777,0, + 0.899219,0.36777,0, + 0.89712,0.365023,0, + 0.89712,0.365023,0, + 0.89488,0.365565,0, + 0.89488,0.365565,0, + 0.89488,0.328477,0, + 0.89488,0.328477,0, + 0.875566,0.328477,0, + 0.875566,0.328477,0, + 0.875566,0.302305,0, + 0.875566,0.302305,0, + 0.89488,0.302305,0, + 0.977735,0.44674,0, + 0.977735,0.498384,0, + 0.977735,0.44674,0, + 0.943165,0.44674,0, + 0.943165,0.44674,0, + 0.943165,0.444501,0, + 0.943165,0.444501,0, + 0.945265,0.443101,0, + 0.945265,0.443101,0, + 0.949184,0.443101,0, + 0.949184,0.443101,0, + 0.951143,0.441002,0, + 0.951143,0.441002,0, + 0.950164,0.438763,0, + 0.950164,0.438763,0, + 0.947224,0.438763,0, + 0.947224,0.438763,0, + 0.938126,0.438063,0, + 0.938126,0.438063,0, + 0.937287,0.436786,0, + 0.937287,0.436786,0, + 0.938126,0.435264,0, + 0.938126,0.435264,0, + 0.940226,0.434424,0, + 0.940226,0.434424,0, + 0.939386,0.432745,0, + 0.939386,0.432745,0, + 0.940226,0.432745,0, + 0.940226,0.432745,0, + 0.940926,0.430925,0, + 0.940926,0.430925,0, + 0.944215,0.430226,0, + 0.944215,0.430226,0, + 0.949184,0.428793,0, + 0.949184,0.428793,0, + 0.953241,0.428126,0, + 0.953241,0.428126,0, + 0.953241,0.426587,0, + 0.953241,0.426587,0, + 0.951212,0.425747,0, + 0.951212,0.425747,0, + 0.950164,0.423367,0, + 0.950164,0.423367,0, + 0.950688,0.422108,0, + 0.950688,0.422108,0, + 0.950426,0.420498,0, + 0.950426,0.420498,0, + 0.945265,0.417087,0, + 0.945265,0.417087,0, + 0.942571,0.418408,0, + 0.942571,0.418408,0, + 0.944215,0.420498,0, + 0.944215,0.420498,0, + 0.936308,0.420498,0, + 0.936308,0.420498,0, + 0.936308,0.409214,0, + 0.936308,0.409214,0, + 0.932949,0.406461,0, + 0.932949,0.406461,0, + 0.931549,0.405062,0, + 0.931549,0.405062,0, + 0.931549,0.400947,0, + 0.931549,0.400947,0, + 0.933648,0.393998,0, + 0.933648,0.393998,0, + 0.934628,0.389754,0, + 0.934628,0.389754,0, + 0.92805,0.385842,0, + 0.92805,0.385842,0, + 0.92805,0.38409,0, + 0.92805,0.38409,0, + 0.921472,0.377804,0, + 0.921472,0.377804,0, + 0.915314,0.374927,0, + 0.915314,0.374927,0, + 0.908036,0.373141,0, + 0.908036,0.373141,0, + 0.907197,0.369624,0, + 0.907197,0.369624,0, + 0.904503,0.368924,0, + 0.934628,0.389754,0, + 0.936308,0.391072,0, + 0.936308,0.391072,0, + 0.936308,0.389754,0, + 0.936308,0.282292,0, + 0.89488,0.282292,0, + 0.89488,0.302305,0, + 0.89488,0.282292,0, + 0.936308,0.389754,0, + 0.978155,0.389754,0, + 0.978155,0.389754,0, + 0.978155,0.306784,0, + 0.978155,0.306784,0, + 0.944845,0.306784,0, + 0.882284,0.282292,0, + 0.879345,0.279772,0, + 0.879345,0.279772,0, + 0.879345,0.252131,0, + 0.879345,0.252131,0, + 0.890822,0.248702,0, + 0.890822,0.248702,0, + 0.890822,0.22421,0, + 0.894321,0.143035,0, + 0.890822,0.143035,0, + 0.890822,0.143035,0, + 0.890822,0.177324,0, + 0.890822,0.177324,0, + 0.882285,0.177324,0, + 0.882285,0.177324,0, + 0.882285,0.202797,0, + 0.882285,0.202797,0, + 0.879346,0.206015,0, + 0.879346,0.206015,0, + 0.877526,0.206015,0, + 0.877526,0.206015,0, + 0.876126,0.207695,0, + 0.876126,0.207695,0, + 0.879346,0.208954,0, + 0.879346,0.208954,0, + 0.879346,0.210214,0, + 0.879346,0.210214,0, + 0.878437,0.212873,0, + 0.878437,0.212873,0, + 0.879346,0.214553,0, + 0.879346,0.214553,0, + 0.878891,0.218052,0, + 0.878891,0.218052,0, + 0.876826,0.216302,0, + 0.876826,0.216302,0, + 0.872768,0.216302,0, + 0.872768,0.216302,0, + 0.86759,0.218052,0, + 0.86759,0.218052,0, + 0.861712,0.218052,0, + 0.861712,0.218052,0, + 0.860452,0.217177,0, + 0.860452,0.217177,0, + 0.861712,0.216302,0, + 0.861712,0.216302,0, + 0.861712,0.213713,0, + 0.861712,0.213713,0, + 0.860452,0.210914,0, + 0.860452,0.210914,0, + 0.857512,0.207695,0, + 0.882285,0.202797,0, + 0.884524,0.202797,0, + 0.884524,0.202797,0, + 0.886553,0.203636,0, + 0.886553,0.203636,0, + 0.887463,0.203216,0, + 0.887463,0.203216,0, + 0.887008,0.200837,0, + 0.887008,0.200837,0, + 0.889003,0.199857,0, + 0.889003,0.199857,0, + 0.891662,0.203426,0, + 0.891662,0.203426,0, + 0.892571,0.212873,0, + 0.892571,0.212873,0, + 0.893761,0.219312,0, + 0.893761,0.219312,0, + 0.890822,0.22421,0, + 0.935748,0.22421,0, + 0.92903,0.229248,0, + 0.92903,0.229248,0, + 0.935748,0.232747,0, + 0.935748,0.232747,0, + 0.935748,0.248702,0, + 0.935748,0.248702,0, + 0.890822,0.248702,0, + 0.944845,0.306784,0, + 0.944845,0.242404,0, + 0.944845,0.242404,0, + 0.977735,0.242404,0, + 1,0.4129,0, + 0.971437,0.395796,0, + 0.971437,0.395796,0, + 1,0.380947,0, + 1,0.401674,0, + 0.981032,0.401674,0, + 1,0.387798,0, + 0.98711,0.387798,0, + 1,0.380947,0, + 1,0.242404,0, + 0,0,0, + 0,0.106927,0, + 0,0.106927,0, + 0.020139,0.124281,0, + 0.020139,0.124281,0, + 0.020139,0,0, + 0.020139,0.124281,0, + 0.020139,0.183902,0, + 0.020139,0.183902,0, + 0,0.183902,0, + 0,0.183902,0, + 0,0.188661,0, + 0,0.188661,0, + 0.008103,0.1909,0, + 0.008103,0.1909,0, + 0.008103,0.207695,0, + 0.008103,0.207695,0, + 0.020139,0.207695,0, + 0.023498,0.207695,0, + 0.023498,0.213853,0, + 0.023498,0.213853,0, + 0.019999,0.217352,0, + 0.019999,0.217352,0, + 0.029936,0.217352,0, + 0.012302,0.1296,0, + 0,0.1296,0, + 0,0.119802,0, + 0.012302,0.119802,0, + 0.012302,0.119802,0, + 0.012302,0.1296,0, + 0,0.456546,0, + 0,0.498384,0, + 0,0.456546,0, + 0.029936,0.437424,0, + 0.029936,0.430575,0, + 0,0.412337,0, + 0.029936,0.401674,0, + 0,0.401674,0, + 0.029936,0.401674,0, + 0.029936,0.387798,0, + 0.029936,0.387798,0, + 0,0.387798,0, + 0,0.38194,0, + 0,0.242404,0, + 0.029936,0.322739,0, + 0.020139,0.322739,0, + 0.020139,0.322739,0, + 0.020139,0.311402,0, + 0.020139,0.311402,0, + 0.013981,0.311402,0, + 0.013981,0.311402,0, + 0.013981,0.289009,0, + 0.013981,0.289009,0, + 0.029936,0.289009,0, + 0,0.242404,0, + 0.029936,0.242404,0, + 0.019859,0.498384,0, + 0.019859,0.443801,0, + 0.029936,0.430575,0, + 0.029936,0.437424,0, + 0.062002,0.387679,0, + 0.103289,0.387679,0, + 0.03457,0.242264,0, + 0.059062,0.242264,0, + 0.03408,0.217492,0, + 0.029952,0.217492,0, + 0.145275,0.177185,0, + 0.134079,0.177185,0, + 0.686346,0.270325,0, + 0.686346,0.282711,0, + 0.76948,0.210214,0, + 0.76948,0.217492,0, + 0.977735,0.171866,0, + 0.977735,0.242404,0, + 0.977735,0.163469,0, + 0.977735,0.171866,0, + 0.436664,0.422948,0, + 0.478371,0.422948,0, + 0.583824,0.425817,0, + 0.583382,0.424767,0, + 0.686625,0.475431,0, + 0.686625,0.462975,0, + 0.686625,0.47893,0, + 0.686625,0.475431,0, + 0.686625,0.453528,0, + 0.686625,0.44716,0, + 0.720635,0.373141,0, + 0.720635,0.372353,0, + 0.749886,0.290969,0, + 0.749886,0.265917,0, + 0.757094,0.265917,0, + 0.762447,0.265917,0, + 0.936308,0.389754,0, + 0.936308,0.282292,0, + 0.89488,0.282292,0, + 0.883124,0.282292,0, + 0.020139,0.183902,0, + 0.020139,0.207695,0, + 0.020139,0.207695,0, + 0.023498,0.207695,0, + 0.686346,0.282711,0, + 0.686346,0.315601,0, + 0.76948,0.217492,0, + 0.76948,0.247582,0 +}; +static const struct gllist timezones_frame = { + GL_V3F, GL_LINES, 3970, timezones_data, 0 +}; +const struct gllist *timezones = &timezones_frame; diff --git a/hacks/glx/timezones.dxf b/hacks/glx/timezones.dxf new file mode 100644 index 00000000..efed43b8 --- /dev/null +++ b/hacks/glx/timezones.dxf @@ -0,0 +1,31768 @@ + 0 +SECTION + 2 +ENTITIES + 0 +LINE + 8 +BLOCK_2 +10 +888.01171875 +20 +7122.0 +30 +0.0 +11 +888.01171875 +21 +6391.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +888.01171875 +20 +6391.998046875 +30 +0.0 +11 +682.013671875 +21 +6349.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +682.013671875 +20 +6349.998046875 +30 +0.0 +11 +428.015625 +21 +6249.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +888.01171875 +20 +6391.998046875 +30 +0.0 +11 +1488.01171875 +21 +6349.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1488.01171875 +20 +6349.998046875 +30 +0.0 +11 +1488.01171875 +21 +7122.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2078.015625 +20 +7122.0 +30 +0.0 +11 +2078.015625 +21 +6349.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2078.015625 +20 +6349.998046875 +30 +0.0 +11 +2188.013671875 +21 +6477.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2188.013671875 +20 +6477.99609375 +30 +0.0 +11 +2176.013671875 +21 +6499.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2176.013671875 +20 +6499.998046875 +30 +0.0 +11 +2264.015625 +21 +6589.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2264.015625 +20 +6589.998046875 +30 +0.0 +11 +2448.01171875 +21 +6633.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2448.01171875 +20 +6633.99609375 +30 +0.0 +11 +2508.01171875 +21 +6633.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2508.01171875 +20 +6633.99609375 +30 +0.0 +11 +2624.015625 +21 +6673.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2624.015625 +20 +6673.998046875 +30 +0.0 +11 +2676.01171875 +21 +6673.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2676.01171875 +20 +6673.998046875 +30 +0.0 +11 +2676.01171875 +21 +7122.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3266.015625 +20 +7122.0 +30 +0.0 +11 +3266.015625 +21 +6753.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3266.015625 +20 +6753.99609375 +30 +0.0 +11 +3092.015625 +21 +6753.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3092.015625 +20 +6753.99609375 +30 +0.0 +11 +3092.015625 +21 +6465.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3092.015625 +20 +6465.99609375 +30 +0.0 +11 +3370.013671875 +21 +6432.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3370.013671875 +20 +6432.0 +30 +0.0 +11 +3424.013671875 +21 +6414.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3424.013671875 +20 +6414.0 +30 +0.0 +11 +3550.013671875 +21 +6318.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3550.013671875 +20 +6318.0 +30 +0.0 +11 +3592.013671875 +21 +6318.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3592.013671875 +20 +6318.0 +30 +0.0 +11 +3612.01171875 +21 +6297.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3612.01171875 +20 +6297.99609375 +30 +0.0 +11 +3612.01171875 +21 +6210.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3612.01171875 +20 +6210.0 +30 +0.0 +11 +3092.015625 +21 +6210.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3092.015625 +20 +6210.0 +30 +0.0 +11 +3092.015625 +21 +5934.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3092.015625 +20 +5934.0 +30 +0.0 +11 +2772.01171875 +21 +5934.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2772.01171875 +20 +5934.0 +30 +0.0 +11 +2772.01171875 +21 +5502.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2772.01171875 +20 +5502.0 +30 +0.0 +11 +3010.013671875 +21 +5502.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3866.009765625 +20 +6849.99609375 +30 +0.0 +11 +3866.009765625 +21 +7122.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3866.009765625 +20 +6849.99609375 +30 +0.0 +11 +3764.009765625 +21 +6849.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3764.009765625 +20 +6849.99609375 +30 +0.0 +11 +3764.009765625 +21 +6183.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3764.009765625 +20 +6183.99609375 +30 +0.0 +11 +3718.013671875 +21 +6168.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3718.013671875 +20 +6168.0 +30 +0.0 +11 +3702.01171875 +21 +6126.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3702.01171875 +20 +6126.0 +30 +0.0 +11 +3666.01171875 +21 +6081.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3666.01171875 +20 +6081.99609375 +30 +0.0 +11 +3666.01171875 +21 +6060.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3666.01171875 +20 +6060.0 +30 +0.0 +11 +3710.015625 +21 +6027.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3710.015625 +20 +6027.99609375 +30 +0.0 +11 +3764.009765625 +21 +6006.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3764.009765625 +20 +6006.0 +30 +0.0 +11 +3764.009765625 +21 +5751.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3764.009765625 +20 +5751.99609375 +30 +0.0 +11 +3666.01171875 +21 +5773.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3666.01171875 +20 +5773.998046875 +30 +0.0 +11 +3612.01171875 +21 +5809.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3612.01171875 +20 +5809.998046875 +30 +0.0 +11 +3580.013671875 +21 +5791.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4456.0078125 +20 +7122.0 +30 +0.0 +11 +4456.0078125 +21 +6849.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4456.0078125 +20 +6849.99609375 +30 +0.0 +11 +4618.0078125 +21 +6849.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4618.0078125 +20 +6849.99609375 +30 +0.0 +11 +4766.015625 +21 +6816.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1542.01171875 +20 +6321.99609375 +30 +0.0 +11 +1542.01171875 +21 +5941.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1558.013671875 +20 +5941.998046875 +30 +0.0 +11 +1630.013671875 +21 +5952.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1630.013671875 +20 +5952.0 +30 +0.0 +11 +1686.01171875 +21 +5895.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1686.01171875 +20 +5895.99609375 +30 +0.0 +11 +1714.013671875 +21 +5895.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1714.013671875 +20 +5895.99609375 +30 +0.0 +11 +1756.013671875 +21 +5923.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1756.013671875 +20 +5923.998046875 +30 +0.0 +11 +1776.01171875 +21 +5923.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1776.01171875 +20 +5923.998046875 +30 +0.0 +11 +1872.01171875 +21 +5853.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1872.01171875 +20 +5853.99609375 +30 +0.0 +11 +1924.013671875 +21 +5796.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1924.013671875 +20 +5796.0 +30 +0.0 +11 +1992.01171875 +21 +5773.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1992.01171875 +20 +5773.998046875 +30 +0.0 +11 +1992.01171875 +21 +5736.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1992.01171875 +20 +5736.0 +30 +0.0 +11 +1940.015625 +21 +5715.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1940.015625 +20 +5715.99609375 +30 +0.0 +11 +1872.01171875 +21 +5715.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1872.01171875 +20 +5715.99609375 +30 +0.0 +11 +1850.015625 +21 +5688.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1850.015625 +20 +5688.0 +30 +0.0 +11 +1898.015625 +21 +5637.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1898.015625 +20 +5637.99609375 +30 +0.0 +11 +2078.015625 +21 +5539.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1542.01171875 +20 +6321.99609375 +30 +0.0 +11 +1630.013671875 +21 +6321.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1630.013671875 +20 +6321.99609375 +30 +0.0 +11 +1686.01171875 +21 +6291.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1686.01171875 +20 +6291.99609375 +30 +0.0 +11 +1735.013671875 +21 +6291.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1735.013671875 +20 +6291.99609375 +30 +0.0 +11 +1735.013671875 +21 +6211.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1735.013671875 +20 +6211.998046875 +30 +0.0 +11 +1824.01171875 +21 +6211.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1824.01171875 +20 +6211.998046875 +30 +0.0 +11 +1850.015625 +21 +6171.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1850.015625 +20 +6171.99609375 +30 +0.0 +11 +1890.01171875 +21 +6171.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1890.01171875 +20 +6171.99609375 +30 +0.0 +11 +1890.01171875 +21 +6132.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1890.01171875 +20 +6132.0 +30 +0.0 +11 +1924.013671875 +21 +6109.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1924.013671875 +20 +6109.998046875 +30 +0.0 +11 +1958.015625 +21 +6109.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1958.015625 +20 +6109.998046875 +30 +0.0 +11 +2026.013671875 +21 +6021.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2026.013671875 +20 +6021.99609375 +30 +0.0 +11 +2078.015625 +21 +5991.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2078.015625 +20 +5991.99609375 +30 +0.0 +11 +2108.015625 +21 +5991.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2108.015625 +20 +5991.99609375 +30 +0.0 +11 +2108.015625 +21 +5967.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2108.015625 +20 +5967.99609375 +30 +0.0 +11 +2202.01171875 +21 +5967.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2202.01171875 +20 +5967.99609375 +30 +0.0 +11 +2232.01171875 +21 +5923.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2232.01171875 +20 +5923.998046875 +30 +0.0 +11 +2382.01171875 +21 +5923.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2382.01171875 +20 +5923.998046875 +30 +0.0 +11 +2382.01171875 +21 +5835.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2382.01171875 +20 +5835.99609375 +30 +0.0 +11 +2294.015625 +21 +5811.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2294.015625 +20 +5811.99609375 +30 +0.0 +11 +2232.01171875 +21 +5824.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2232.01171875 +20 +5824.998046875 +30 +0.0 +11 +2217.01171875 +21 +5818.5 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2217.01171875 +20 +5818.5 +30 +0.0 +11 +2232.01171875 +21 +5773.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2232.01171875 +20 +5773.998046875 +30 +0.0 +11 +2307.01171875 +21 +5715.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2307.01171875 +20 +5715.99609375 +30 +0.0 +11 +2396.015625 +21 +5701.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2396.015625 +20 +5701.998046875 +30 +0.0 +11 +2450.015625 +21 +5649.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2450.015625 +20 +5649.99609375 +30 +0.0 +11 +2440.013671875 +21 +5613.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2440.013671875 +20 +5613.99609375 +30 +0.0 +11 +2520.01171875 +21 +5568.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2520.01171875 +20 +5568.0 +30 +0.0 +11 +2520.01171875 +21 +5539.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2520.01171875 +20 +5539.998046875 +30 +0.0 +11 +2508.01171875 +21 +5521.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2508.01171875 +20 +5521.998046875 +30 +0.0 +11 +2520.01171875 +21 +5497.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2520.01171875 +20 +5497.998046875 +30 +0.0 +11 +2542.013671875 +21 +5497.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2542.013671875 +20 +5497.998046875 +30 +0.0 +11 +2542.013671875 +21 +5449.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +428.015625 +20 +5539.998046875 +30 +0.0 +11 +886.013671875 +21 +5539.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +886.013671875 +20 +5539.998046875 +30 +0.0 +11 +886.013671875 +21 +4609.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +886.013671875 +20 +4609.998046875 +30 +0.0 +11 +428.015625 +21 +4609.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +428.015625 +20 +4132.001953125 +30 +0.0 +11 +494.009765625 +21 +4132.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +494.009765625 +20 +4132.001953125 +30 +0.0 +11 +494.009765625 +21 +3462.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +428.015625 +20 +3462.0 +30 +0.0 +11 +494.009765625 +21 +3462.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +844.013671875 +20 +3462.0 +30 +0.0 +11 +844.013671875 +21 +3606.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +844.013671875 +20 +3606.0 +30 +0.0 +11 +756.01171875 +21 +3606.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +756.01171875 +20 +3606.0 +30 +0.0 +11 +756.01171875 +21 +3676.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +756.01171875 +20 +3676.001953125 +30 +0.0 +11 +1006.013671875 +21 +3676.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1006.013671875 +20 +3676.001953125 +30 +0.0 +11 +1212.01171875 +21 +3211.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1212.01171875 +20 +3211.998046875 +30 +0.0 +11 +1212.01171875 +21 +3145.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1212.01171875 +20 +3145.998046875 +30 +0.0 +11 +1006.013671875 +21 +3145.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1006.013671875 +20 +3145.998046875 +30 +0.0 +11 +1006.013671875 +21 +3232.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1006.013671875 +20 +3232.001953125 +30 +0.0 +11 +546.01171875 +21 +3232.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +546.01171875 +20 +3232.001953125 +30 +0.0 +11 +546.01171875 +21 +3108.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +546.01171875 +20 +3108.0 +30 +0.0 +11 +487.013671875 +21 +3108.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +487.013671875 +20 +3108.0 +30 +0.0 +11 +487.013671875 +21 +2659.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +487.013671875 +20 +2659.998046875 +30 +0.0 +11 +890.015625 +21 +2659.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +890.015625 +20 +2659.998046875 +30 +0.0 +11 +890.015625 +21 +0.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1476.01171875 +20 +0.0 +30 +0.0 +11 +1476.01171875 +21 +2619.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2076.01171875 +20 +0.0 +30 +0.0 +11 +2076.01171875 +21 +2532.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2668.013671875 +20 +0.0 +30 +0.0 +11 +2668.013671875 +21 +4512.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3260.009765625 +20 +0.0 +30 +0.0 +11 +3260.009765625 +21 +2232.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3260.009765625 +20 +2232.0 +30 +0.0 +11 +2736.01171875 +21 +2232.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2736.01171875 +20 +2232.0 +30 +0.0 +11 +2736.01171875 +21 +2688.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2736.01171875 +20 +2688.0 +30 +0.0 +11 +3260.009765625 +21 +2688.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1916.009765625 +20 +2659.998046875 +30 +0.0 +11 +2336.009765625 +21 +2659.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2336.009765625 +20 +2659.998046875 +30 +0.0 +11 +2336.009765625 +21 +2532.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2336.009765625 +20 +2532.0 +30 +0.0 +11 +2076.01171875 +21 +2532.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1916.009765625 +20 +2532.0 +30 +0.0 +11 +1916.009765625 +21 +2659.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3856.013671875 +20 +0.0 +30 +0.0 +11 +3856.013671875 +21 +4281.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4448.015625 +20 +0.0 +30 +0.0 +11 +4448.015625 +21 +1329.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5048.015625 +20 +0.0 +30 +0.0 +11 +5048.015625 +21 +2251.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5644.0078125 +20 +0.0 +30 +0.0 +11 +5644.0078125 +21 +1387.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5644.0078125 +20 +1387.998046875 +30 +0.0 +11 +5348.015625 +21 +1387.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5348.015625 +20 +1387.998046875 +30 +0.0 +11 +5348.015625 +21 +1491.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5348.015625 +20 +1491.99609375 +30 +0.0 +11 +5644.0078125 +21 +1491.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5644.0078125 +20 +1491.99609375 +30 +0.0 +11 +5644.0078125 +21 +3075.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6236.015625 +20 +0.0 +30 +0.0 +11 +6236.015625 +21 +4086.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6832.01953125 +20 +0.0 +30 +0.0 +11 +6832.01953125 +21 +1911.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6832.01953125 +20 +1911.99609375 +30 +0.0 +11 +6556.01953125 +21 +1911.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6556.01953125 +20 +1911.99609375 +30 +0.0 +11 +6556.01953125 +21 +2151.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6556.01953125 +20 +2151.99609375 +30 +0.0 +11 +6832.01953125 +21 +2151.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6832.01953125 +20 +2151.99609375 +30 +0.0 +11 +6832.01953125 +21 +3183.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6832.01953125 +20 +3183.99609375 +30 +0.0 +11 +6496.01953125 +21 +3183.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6496.01953125 +20 +3183.99609375 +30 +0.0 +11 +6496.01953125 +21 +3316.5234375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6496.01953125 +20 +3316.5234375 +30 +0.0 +11 +6832.01953125 +21 +3316.5234375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6832.01953125 +20 +3316.5234375 +30 +0.0 +11 +6832.01953125 +21 +3728.00390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7424.015625 +20 +0.0 +30 +0.0 +11 +7424.015625 +21 +3403.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8020.0078125 +20 +0.0 +30 +0.0 +11 +8020.0078125 +21 +2215.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8616.01171875 +20 +0.0 +30 +0.0 +11 +8616.01171875 +21 +2860.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9212.015625 +20 +0.0 +30 +0.0 +11 +9212.015625 +21 +3973.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9808.0078125 +20 +0.0 +30 +0.0 +11 +9808.0078125 +21 +3862.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9920.015625 +20 +3283.998046875 +30 +0.0 +11 +10044.01171875 +21 +3283.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10044.01171875 +20 +3283.998046875 +30 +0.0 +11 +10044.01171875 +21 +3183.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10044.01171875 +20 +3183.99609375 +30 +0.0 +11 +9920.015625 +21 +3183.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9920.015625 +20 +3183.99609375 +30 +0.0 +11 +9920.015625 +21 +3283.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10404.01171875 +20 +0.0 +30 +0.0 +11 +10404.01171875 +21 +4210.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10996.0078125 +20 +0.0 +30 +0.0 +11 +10996.0078125 +21 +3004.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10996.0078125 +20 +3108.0 +30 +0.0 +11 +10848.01171875 +21 +3108.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10848.01171875 +20 +3108.0 +30 +0.0 +11 +10848.01171875 +21 +3004.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10848.01171875 +20 +3004.001953125 +30 +0.0 +11 +10996.0078125 +21 +3004.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11588.015625 +20 +0.0 +30 +0.0 +11 +11588.015625 +21 +3183.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11588.015625 +20 +3183.99609375 +30 +0.0 +11 +11732.015625 +21 +3183.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11732.015625 +20 +3183.99609375 +30 +0.0 +11 +11732.015625 +21 +3264.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12188.015625 +20 +0.0 +30 +0.0 +11 +12188.015625 +21 +2284.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12780.01171875 +20 +0.0 +30 +0.0 +11 +12780.01171875 +21 +2044.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13372.0078125 +20 +0.0 +30 +0.0 +11 +13372.0078125 +21 +3204.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13972.0078125 +20 +0.0 +30 +0.0 +11 +13972.0078125 +21 +1408.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13972.0078125 +20 +1408.001953125 +30 +0.0 +11 +13684.0078125 +21 +1408.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13684.0078125 +20 +1408.001953125 +30 +0.0 +11 +13684.0078125 +21 +1828.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13684.0078125 +20 +1828.001953125 +30 +0.0 +11 +13972.0078125 +21 +2284.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13972.0078125 +20 +2284.001953125 +30 +0.0 +11 +13972.0078125 +21 +2335.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13405.9921875 +20 +2356.001953125 +30 +0.0 +11 +13684.0078125 +21 +2356.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13684.0078125 +20 +2356.001953125 +30 +0.0 +11 +13684.0078125 +21 +2227.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13684.0078125 +20 +2227.998046875 +30 +0.0 +11 +13405.9921875 +21 +2227.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13405.9921875 +20 +2227.998046875 +30 +0.0 +11 +13405.9921875 +21 +2356.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13972.0078125 +20 +2455.998046875 +30 +0.0 +11 +13728.01171875 +21 +2455.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13728.01171875 +20 +2455.998046875 +30 +0.0 +11 +13728.01171875 +21 +2335.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13728.01171875 +20 +2335.998046875 +30 +0.0 +11 +13972.0078125 +21 +2335.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +14290.18359375 +20 +1852.001953125 +30 +0.0 +11 +14188.0078125 +21 +1852.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +14188.0078125 +20 +1852.001953125 +30 +0.0 +11 +14120.015625 +21 +1776.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +14120.015625 +20 +1776.0 +30 +0.0 +11 +14120.015625 +21 +1711.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +14120.015625 +20 +1711.998046875 +30 +0.0 +11 +14290.18359375 +21 +1711.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1476.01171875 +20 +2619.99609375 +30 +0.0 +11 +1708.0078125 +21 +2619.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1708.0078125 +20 +2619.99609375 +30 +0.0 +11 +1816.0078125 +21 +2712.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1816.0078125 +20 +2712.0 +30 +0.0 +11 +1816.0078125 +21 +3028.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1816.0078125 +20 +3028.001953125 +30 +0.0 +11 +1476.01171875 +21 +3028.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1476.01171875 +20 +3028.001953125 +30 +0.0 +11 +1476.01171875 +21 +5539.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1524.005859375 +20 +3271.998046875 +30 +0.0 +11 +1762.0078125 +21 +3271.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1762.0078125 +20 +3271.998046875 +30 +0.0 +11 +1762.0078125 +21 +3108.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1762.0078125 +20 +3108.0 +30 +0.0 +11 +1524.005859375 +21 +3108.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1524.005859375 +20 +3108.0 +30 +0.0 +11 +1524.005859375 +21 +3271.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2076.01171875 +20 +2665.998046875 +30 +0.0 +11 +2076.01171875 +21 +5539.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2542.013671875 +20 +5449.998046875 +30 +0.0 +11 +2596.0078125 +21 +5407.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2596.0078125 +20 +5407.998046875 +30 +0.0 +11 +2596.0078125 +21 +5356.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2596.0078125 +20 +5356.001953125 +30 +0.0 +11 +2514.01171875 +21 +5356.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2514.01171875 +20 +5356.001953125 +30 +0.0 +11 +2480.015625 +21 +5311.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2480.015625 +20 +5311.998046875 +30 +0.0 +11 +2450.015625 +21 +5311.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2450.015625 +20 +5311.998046875 +30 +0.0 +11 +2450.015625 +21 +5239.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2450.015625 +20 +5239.998046875 +30 +0.0 +11 +2508.01171875 +21 +5239.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2508.01171875 +20 +5239.998046875 +30 +0.0 +11 +2620.0078125 +21 +5220.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2620.0078125 +20 +5220.0 +30 +0.0 +11 +2620.0078125 +21 +4980.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2620.0078125 +20 +4980.0 +30 +0.0 +11 +2596.0078125 +21 +4980.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2596.0078125 +20 +4980.0 +30 +0.0 +11 +2608.0078125 +21 +4908.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2608.0078125 +20 +4908.0 +30 +0.0 +11 +2596.0078125 +21 +4831.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2596.0078125 +20 +4831.998046875 +30 +0.0 +11 +2696.009765625 +21 +4660.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2696.009765625 +20 +4660.001953125 +30 +0.0 +11 +2497.013671875 +21 +4660.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2497.013671875 +20 +4660.001953125 +30 +0.0 +11 +2497.013671875 +21 +4512.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2497.013671875 +20 +4512.0 +30 +0.0 +11 +2668.013671875 +21 +4512.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2078.015625 +20 +6349.998046875 +30 +0.0 +11 +1898.015625 +21 +6321.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1898.015625 +20 +6321.99609375 +30 +0.0 +11 +1800.005859375 +21 +6307.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +1800.005859375 +20 +6307.998046875 +30 +0.0 +11 +1735.013671875 +21 +6291.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3010.013671875 +20 +5502.0 +30 +0.0 +11 +3010.013671875 +21 +5461.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3010.013671875 +20 +5461.998046875 +30 +0.0 +11 +3026.015625 +21 +5449.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3026.015625 +20 +5449.998046875 +30 +0.0 +11 +3120.01171875 +21 +5449.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3120.01171875 +20 +5449.998046875 +30 +0.0 +11 +3154.013671875 +21 +5407.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3154.013671875 +20 +5407.998046875 +30 +0.0 +11 +3166.013671875 +21 +5334.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3166.013671875 +20 +5334.0 +30 +0.0 +11 +3154.013671875 +21 +5287.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3154.013671875 +20 +5287.998046875 +30 +0.0 +11 +3166.013671875 +21 +5257.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3166.013671875 +20 +5257.998046875 +30 +0.0 +11 +3120.01171875 +21 +5203.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3120.01171875 +20 +5203.998046875 +30 +0.0 +11 +3120.01171875 +21 +5143.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3120.01171875 +20 +5143.998046875 +30 +0.0 +11 +3084.01171875 +21 +5143.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3084.01171875 +20 +5143.998046875 +30 +0.0 +11 +3084.01171875 +21 +5124.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3084.01171875 +20 +5124.0 +30 +0.0 +11 +3120.01171875 +21 +5124.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3120.01171875 +20 +5124.0 +30 +0.0 +11 +3120.01171875 +21 +5052.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3120.01171875 +20 +5052.0 +30 +0.0 +11 +3084.01171875 +21 +5052.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3084.01171875 +20 +5052.0 +30 +0.0 +11 +3084.01171875 +21 +5023.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3084.01171875 +20 +5023.998046875 +30 +0.0 +11 +3056.015625 +21 +5023.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3056.015625 +20 +5023.998046875 +30 +0.0 +11 +3056.015625 +21 +4831.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3056.015625 +20 +4831.998046875 +30 +0.0 +11 +2974.013671875 +21 +4831.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2974.013671875 +20 +4831.998046875 +30 +0.0 +11 +2974.013671875 +21 +4767.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2974.013671875 +20 +4767.99609375 +30 +0.0 +11 +2916.01171875 +21 +4812.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2916.01171875 +20 +4812.0 +30 +0.0 +11 +2848.013671875 +21 +4812.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2848.013671875 +20 +4812.0 +30 +0.0 +11 +2848.013671875 +21 +4800.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2848.013671875 +20 +4800.0 +30 +0.0 +11 +2822.015625 +21 +4800.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2822.015625 +20 +4800.0 +30 +0.0 +11 +2835.01171875 +21 +4746.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2835.01171875 +20 +4746.0 +30 +0.0 +11 +2835.01171875 +21 +4680.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2835.01171875 +20 +4680.0 +30 +0.0 +11 +2810.015625 +21 +4680.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2810.015625 +20 +4680.0 +30 +0.0 +11 +2835.01171875 +21 +4626.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2835.01171875 +20 +4626.0 +30 +0.0 +11 +2872.013671875 +21 +4626.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2872.013671875 +20 +4626.0 +30 +0.0 +11 +2900.015625 +21 +4537.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2900.015625 +20 +4537.998046875 +30 +0.0 +11 +2945.015625 +21 +4512.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2945.015625 +20 +4512.0 +30 +0.0 +11 +2945.015625 +21 +4482.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2945.015625 +20 +4482.0 +30 +0.0 +11 +3010.013671875 +21 +4443.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3010.013671875 +20 +4443.99609375 +30 +0.0 +11 +3015.01171875 +21 +4395.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3015.01171875 +20 +4395.99609375 +30 +0.0 +11 +2996.015625 +21 +4375.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2996.015625 +20 +4375.998046875 +30 +0.0 +11 +2974.013671875 +21 +4395.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2974.013671875 +20 +4395.99609375 +30 +0.0 +11 +2945.015625 +21 +4356.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2945.015625 +20 +4356.0 +30 +0.0 +11 +2985.01171875 +21 +4311.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2974.013671875 +20 +4311.99609375 +30 +0.0 +11 +3026.015625 +21 +4299.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3026.015625 +20 +4299.99609375 +30 +0.0 +11 +3092.015625 +21 +4263.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3092.015625 +20 +4263.99609375 +30 +0.0 +11 +3176.015625 +21 +4231.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3176.015625 +20 +4231.998046875 +30 +0.0 +11 +3218.015625 +21 +4207.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3218.015625 +20 +4207.998046875 +30 +0.0 +11 +3260.009765625 +21 +4188.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3260.009765625 +20 +4188.0 +30 +0.0 +11 +3260.009765625 +21 +2688.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3580.013671875 +20 +5791.998046875 +30 +0.0 +11 +3580.013671875 +21 +5449.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3580.013671875 +20 +5449.998046875 +30 +0.0 +11 +3552.01171875 +21 +5407.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3552.01171875 +20 +5407.998046875 +30 +0.0 +11 +3566.015625 +21 +5382.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3566.015625 +20 +5382.0 +30 +0.0 +11 +3622.013671875 +21 +5382.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3622.013671875 +20 +5382.0 +30 +0.0 +11 +3650.009765625 +21 +5370.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3650.009765625 +20 +5370.99609375 +30 +0.0 +11 +3666.01171875 +21 +5334.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3666.01171875 +20 +5334.0 +30 +0.0 +11 +3715.0078125 +21 +5356.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3715.0078125 +20 +5356.001953125 +30 +0.0 +11 +3715.0078125 +21 +5345.00390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3715.0078125 +20 +5345.00390625 +30 +0.0 +11 +3690.509765625 +21 +5310.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3690.509765625 +20 +5310.99609375 +30 +0.0 +11 +3690.509765625 +21 +5220.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3690.509765625 +20 +5220.0 +30 +0.0 +11 +3715.0078125 +21 +5203.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3715.0078125 +20 +5203.998046875 +30 +0.0 +11 +3690.509765625 +21 +5161.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3690.509765625 +20 +5161.998046875 +30 +0.0 +11 +3666.01171875 +21 +5161.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3666.01171875 +20 +5161.998046875 +30 +0.0 +11 +3666.01171875 +21 +5077.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3666.01171875 +20 +5077.998046875 +30 +0.0 +11 +3728.009765625 +21 +5037.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3728.009765625 +20 +5037.99609375 +30 +0.0 +11 +3780.01171875 +21 +5023.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3780.01171875 +20 +5023.998046875 +30 +0.0 +11 +3780.01171875 +21 +4980.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3780.01171875 +20 +4980.0 +30 +0.0 +11 +3746.009765625 +21 +4927.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3746.009765625 +20 +4927.998046875 +30 +0.0 +11 +3780.01171875 +21 +4831.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3780.01171875 +20 +4831.998046875 +30 +0.0 +11 +3780.01171875 +21 +4734.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3780.01171875 +20 +4734.0 +30 +0.0 +11 +3822.01171875 +21 +4746.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3822.01171875 +20 +4746.0 +30 +0.0 +11 +3856.013671875 +21 +4698.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3856.013671875 +20 +4698.0 +30 +0.0 +11 +3856.013671875 +21 +4512.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3856.013671875 +20 +4512.0 +30 +0.0 +11 +3728.009765625 +21 +4512.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3728.009765625 +20 +4512.0 +30 +0.0 +11 +3728.009765625 +21 +4281.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3728.009765625 +20 +4281.99609375 +30 +0.0 +11 +3856.013671875 +21 +4281.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4766.015625 +20 +6816.0 +30 +0.0 +11 +4700.015625 +21 +6798.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4700.015625 +20 +6798.0 +30 +0.0 +11 +4700.015625 +21 +6771.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4700.015625 +20 +6771.99609375 +30 +0.0 +11 +4680.01171875 +21 +6771.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4680.01171875 +20 +6771.99609375 +30 +0.0 +11 +4606.01953125 +21 +6771.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4606.01953125 +20 +6771.99609375 +30 +0.0 +11 +4456.0078125 +21 +6753.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4456.0078125 +20 +6753.99609375 +30 +0.0 +11 +4456.0078125 +21 +6729.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4456.0078125 +20 +6729.99609375 +30 +0.0 +11 +4556.015625 +21 +6729.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4556.015625 +20 +6729.99609375 +30 +0.0 +11 +4556.015625 +21 +6705.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4556.015625 +20 +6705.99609375 +30 +0.0 +11 +4456.0078125 +21 +6693.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4456.0078125 +20 +6693.99609375 +30 +0.0 +11 +4262.015625 +21 +6673.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4262.015625 +20 +6673.998046875 +30 +0.0 +11 +4262.015625 +21 +6621.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4262.015625 +20 +6621.99609375 +30 +0.0 +11 +4436.015625 +21 +6567.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4436.015625 +20 +6567.99609375 +30 +0.0 +11 +4436.015625 +21 +6351.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4436.015625 +20 +6351.99609375 +30 +0.0 +11 +4506.01171875 +21 +6297.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4506.01171875 +20 +6297.99609375 +30 +0.0 +11 +4506.01171875 +21 +6273.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4506.01171875 +20 +6273.99609375 +30 +0.0 +11 +4618.0078125 +21 +6253.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4618.0078125 +20 +6253.998046875 +30 +0.0 +11 +4680.01171875 +21 +6223.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4680.01171875 +20 +6223.998046875 +30 +0.0 +11 +4718.015625 +21 +6210.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4718.015625 +20 +6210.0 +30 +0.0 +11 +4718.015625 +21 +6183.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4718.015625 +20 +6183.99609375 +30 +0.0 +11 +4658.015625 +21 +6147.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4658.015625 +20 +6147.0 +30 +0.0 +11 +4618.0078125 +21 +6117.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4618.0078125 +20 +6117.99609375 +30 +0.0 +11 +4606.01953125 +21 +6043.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4606.01953125 +20 +6043.998046875 +30 +0.0 +11 +4574.015625 +21 +5989.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4574.015625 +20 +5989.998046875 +30 +0.0 +11 +4590.01171875 +21 +5934.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4590.01171875 +20 +5934.0 +30 +0.0 +11 +4562.00390625 +21 +5934.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4574.015625 +20 +5943.99609375 +30 +0.0 +11 +4582.01953125 +21 +5892.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4582.01953125 +20 +5892.0 +30 +0.0 +11 +4606.01953125 +21 +5878.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4606.01953125 +20 +5878.998046875 +30 +0.0 +11 +4590.01171875 +21 +5857.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4590.01171875 +20 +5857.998046875 +30 +0.0 +11 +4612.01953125 +21 +5838.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4612.01953125 +20 +5838.0 +30 +0.0 +11 +4582.01953125 +21 +5791.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4582.01953125 +20 +5791.998046875 +30 +0.0 +11 +4597.01953125 +21 +5773.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4597.01953125 +20 +5773.998046875 +30 +0.0 +11 +4638.01171875 +21 +5751.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4638.01171875 +20 +5751.99609375 +30 +0.0 +11 +4612.01953125 +21 +5718.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4612.01953125 +20 +5718.0 +30 +0.0 +11 +4537.0078125 +21 +5734.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4537.0078125 +20 +5734.998046875 +30 +0.0 +11 +4492.01953125 +21 +5751.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4492.01953125 +20 +5751.99609375 +30 +0.0 +11 +4456.0078125 +21 +5697.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4456.0078125 +20 +5697.99609375 +30 +0.0 +11 +4492.01953125 +21 +5667.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4492.01953125 +20 +5667.99609375 +30 +0.0 +11 +4492.01953125 +21 +5641.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4492.01953125 +20 +5641.998046875 +30 +0.0 +11 +4514.51953125 +21 +5655.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4514.51953125 +20 +5655.0 +30 +0.0 +11 +4514.51953125 +21 +5620.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4514.51953125 +20 +5620.998046875 +30 +0.0 +11 +4574.015625 +21 +5620.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4574.015625 +20 +5620.998046875 +30 +0.0 +11 +4589.51953125 +21 +5601.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4589.51953125 +20 +5601.99609375 +30 +0.0 +11 +4606.01953125 +21 +5655.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4606.01953125 +20 +5655.0 +30 +0.0 +11 +4612.01953125 +21 +5620.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4612.01953125 +20 +5620.998046875 +30 +0.0 +11 +4638.01171875 +21 +5620.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4638.01171875 +20 +5620.998046875 +30 +0.0 +11 +4638.01171875 +21 +5473.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4638.01171875 +20 +5473.998046875 +30 +0.0 +11 +4582.01953125 +21 +5473.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4788.01171875 +20 +5428.998046875 +30 +0.0 +11 +4782.01171875 +21 +5490.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4782.01171875 +20 +5490.0 +30 +0.0 +11 +4812.01171875 +21 +5502.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4812.01171875 +20 +5502.0 +30 +0.0 +11 +4880.015625 +21 +5586.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4880.015625 +20 +5586.0 +30 +0.0 +11 +4880.015625 +21 +5667.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4880.015625 +20 +5667.99609375 +30 +0.0 +11 +4926.01171875 +21 +5667.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4926.01171875 +20 +5667.99609375 +30 +0.0 +11 +4946.015625 +21 +5611.5 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4946.015625 +20 +5611.5 +30 +0.0 +11 +4946.015625 +21 +5521.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4946.015625 +20 +5521.998046875 +30 +0.0 +11 +5008.01953125 +21 +5521.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5008.01953125 +20 +5521.998046875 +30 +0.0 +11 +5058.01171875 +21 +5449.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5058.01171875 +20 +5449.998046875 +30 +0.0 +11 +5042.015625 +21 +5394.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5042.015625 +20 +5394.99609375 +30 +0.0 +11 +4977.01171875 +21 +5407.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4977.01171875 +20 +5407.998046875 +30 +0.0 +11 +4977.01171875 +21 +5428.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4977.01171875 +20 +5428.998046875 +30 +0.0 +11 +4954.01953125 +21 +5428.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4954.01953125 +20 +5428.998046875 +30 +0.0 +11 +4916.015625 +21 +5394.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4916.015625 +20 +5394.99609375 +30 +0.0 +11 +4890.01171875 +21 +5394.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4890.01171875 +20 +5394.99609375 +30 +0.0 +11 +4880.015625 +21 +5449.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4880.015625 +20 +5449.998046875 +30 +0.0 +11 +4836.01171875 +21 +5449.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4836.01171875 +20 +5449.998046875 +30 +0.0 +11 +4788.01171875 +21 +5428.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4582.01953125 +20 +5473.998046875 +30 +0.0 +11 +4444.01953125 +21 +5459.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4444.01953125 +20 +5459.49609375 +30 +0.0 +11 +4406.015625 +21 +5428.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4406.015625 +20 +5428.998046875 +30 +0.0 +11 +4456.0078125 +21 +5418.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4456.0078125 +20 +5418.498046875 +30 +0.0 +11 +4456.0078125 +21 +5370.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4456.0078125 +20 +5370.99609375 +30 +0.0 +11 +4506.01171875 +21 +5334.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4506.01171875 +20 +5334.0 +30 +0.0 +11 +4456.0078125 +21 +5310.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4456.0078125 +20 +5310.99609375 +30 +0.0 +11 +4456.0078125 +21 +4356.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4456.0078125 +20 +4356.0 +30 +0.0 +11 +4290.01171875 +21 +4356.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4290.01171875 +20 +4356.0 +30 +0.0 +11 +4290.01171875 +21 +4053.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4290.01171875 +20 +4053.99609375 +30 +0.0 +11 +4318.01953125 +21 +4053.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4318.01953125 +20 +4053.99609375 +30 +0.0 +11 +4318.01953125 +21 +4026.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4318.01953125 +20 +4026.0 +30 +0.0 +11 +4278.01171875 +21 +4026.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4278.01171875 +20 +4026.0 +30 +0.0 +11 +4246.01953125 +21 +3973.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4246.01953125 +20 +3973.998046875 +30 +0.0 +11 +4220.015625 +21 +3907.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4220.015625 +20 +3907.998046875 +30 +0.0 +11 +4262.015625 +21 +3907.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4262.015625 +20 +3907.998046875 +30 +0.0 +11 +4278.01171875 +21 +3873.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4278.01171875 +20 +3873.99609375 +30 +0.0 +11 +4262.015625 +21 +3852.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4262.015625 +20 +3852.0 +30 +0.0 +11 +4290.01171875 +21 +3829.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4290.01171875 +20 +3829.998046875 +30 +0.0 +11 +4356.01171875 +21 +3840.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4356.01171875 +20 +3840.99609375 +30 +0.0 +11 +4384.01953125 +21 +3801.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4384.01953125 +20 +3801.99609375 +30 +0.0 +11 +4470.01171875 +21 +3801.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4470.01171875 +20 +3801.99609375 +30 +0.0 +11 +4446.01171875 +21 +3745.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4446.01171875 +20 +3745.998046875 +30 +0.0 +11 +4470.01171875 +21 +3691.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4470.01171875 +20 +3691.998046875 +30 +0.0 +11 +4446.01171875 +21 +3670.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4446.01171875 +20 +3670.001953125 +30 +0.0 +11 +4470.01171875 +21 +3649.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4470.01171875 +20 +3649.998046875 +30 +0.0 +11 +4470.01171875 +21 +3631.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4470.01171875 +20 +3631.998046875 +30 +0.0 +11 +4446.01171875 +21 +3619.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4446.01171875 +20 +3619.998046875 +30 +0.0 +11 +4370.015625 +21 +3631.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4370.015625 +20 +3631.998046875 +30 +0.0 +11 +4370.015625 +21 +3604.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4370.015625 +20 +3604.001953125 +30 +0.0 +11 +4398.01171875 +21 +3595.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4398.01171875 +20 +3595.998046875 +30 +0.0 +11 +4398.01171875 +21 +3580.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4398.01171875 +20 +3580.001953125 +30 +0.0 +11 +4356.01171875 +21 +3580.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4356.01171875 +20 +3580.001953125 +30 +0.0 +11 +4356.01171875 +21 +3544.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4356.01171875 +20 +3544.001953125 +30 +0.0 +11 +4398.01171875 +21 +3508.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4398.01171875 +20 +3508.001953125 +30 +0.0 +11 +4356.01171875 +21 +3385.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4356.01171875 +20 +3385.998046875 +30 +0.0 +11 +4276.01953125 +21 +3373.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4276.01953125 +20 +3373.998046875 +30 +0.0 +11 +4246.01953125 +21 +3348.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4246.01953125 +20 +3348.0 +30 +0.0 +11 +4233.01171875 +21 +3298.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4233.01171875 +20 +3298.001953125 +30 +0.0 +11 +4212.01171875 +21 +3277.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4212.01171875 +20 +3277.998046875 +30 +0.0 +11 +4212.01171875 +21 +3268.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4212.01171875 +20 +3268.001953125 +30 +0.0 +11 +4270.01953125 +21 +3246.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4270.01953125 +20 +3246.0 +30 +0.0 +11 +4356.01171875 +21 +3234.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4356.01171875 +20 +3234.0 +30 +0.0 +11 +4500.01171875 +21 +3162.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4500.01171875 +20 +3162.0 +30 +0.0 +11 +4428.01171875 +21 +3124.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4428.01171875 +20 +3124.001953125 +30 +0.0 +11 +4377.01171875 +21 +3115.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4377.01171875 +20 +3115.998046875 +30 +0.0 +11 +4408.01953125 +21 +3055.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4408.01953125 +20 +3055.998046875 +30 +0.0 +11 +4408.01953125 +21 +2989.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4408.01953125 +20 +2989.998046875 +30 +0.0 +11 +4392.515625 +21 +2974.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4392.515625 +20 +2974.001953125 +30 +0.0 +11 +4384.01953125 +21 +2929.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4384.01953125 +20 +2929.998046875 +30 +0.0 +11 +4408.01953125 +21 +2910.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4408.01953125 +20 +2910.0 +30 +0.0 +11 +4370.015625 +21 +2866.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4370.015625 +20 +2866.001953125 +30 +0.0 +11 +4370.015625 +21 +2838.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4370.015625 +20 +2838.0 +30 +0.0 +11 +4356.01171875 +21 +2827.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4356.01171875 +20 +2827.998046875 +30 +0.0 +11 +4363.01953125 +21 +2754.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4363.01953125 +20 +2754.0 +30 +0.0 +11 +4359.515625 +21 +2662.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4359.515625 +20 +2662.001953125 +30 +0.0 +11 +4336.0078125 +21 +2574.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4336.0078125 +20 +2574.0 +30 +0.0 +11 +3880.013671875 +21 +2574.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3880.013671875 +20 +2574.0 +30 +0.0 +11 +3880.013671875 +21 +2076.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +3880.013671875 +20 +2076.0 +30 +0.0 +11 +4222.013671875 +21 +2076.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4222.013671875 +20 +2076.0 +30 +0.0 +11 +4232.015625 +21 +2010.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4232.015625 +20 +2010.0 +30 +0.0 +11 +4232.015625 +21 +1969.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4232.015625 +20 +1969.998046875 +30 +0.0 +11 +4202.015625 +21 +1927.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4202.015625 +20 +1927.998046875 +30 +0.0 +11 +4202.015625 +21 +1899.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4202.015625 +20 +1899.99609375 +30 +0.0 +11 +4184.015625 +21 +1839.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4184.015625 +20 +1839.99609375 +30 +0.0 +11 +4162.013671875 +21 +1839.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4162.013671875 +20 +1839.99609375 +30 +0.0 +11 +4162.013671875 +21 +1731.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4162.013671875 +20 +1731.99609375 +30 +0.0 +11 +4142.015625 +21 +1711.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4142.015625 +20 +1711.998046875 +30 +0.0 +11 +4134.01171875 +21 +1539.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4134.01171875 +20 +1539.99609375 +30 +0.0 +11 +4162.013671875 +21 +1491.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4162.013671875 +20 +1491.99609375 +30 +0.0 +11 +4240.01953125 +21 +1387.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4240.01953125 +20 +1387.998046875 +30 +0.0 +11 +4308.01171875 +21 +1387.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4308.01171875 +20 +1387.998046875 +30 +0.0 +11 +4356.01171875 +21 +1357.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4356.01171875 +20 +1357.998046875 +30 +0.0 +11 +4430.015625 +21 +1345.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4430.015625 +20 +1345.998046875 +30 +0.0 +11 +4448.015625 +21 +1329.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4408.01953125 +20 +1381.998046875 +30 +0.0 +11 +4566.01171875 +21 +1372.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4566.01171875 +20 +1372.998046875 +30 +0.0 +11 +4616.015625 +21 +1396.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4616.015625 +20 +1396.001953125 +30 +0.0 +11 +4510.0078125 +21 +1396.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4510.0078125 +20 +1396.001953125 +30 +0.0 +11 +4462.0078125 +21 +1422.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4462.0078125 +20 +1422.0 +30 +0.0 +11 +4462.0078125 +21 +1626.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4462.0078125 +20 +1626.0 +30 +0.0 +11 +4542.01171875 +21 +1660.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4542.01171875 +20 +1660.001953125 +30 +0.0 +11 +4542.01171875 +21 +1690.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4542.01171875 +20 +1690.001953125 +30 +0.0 +11 +4486.0078125 +21 +1690.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4486.0078125 +20 +1690.001953125 +30 +0.0 +11 +4462.0078125 +21 +1711.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4462.0078125 +20 +1711.998046875 +30 +0.0 +11 +4462.0078125 +21 +1747.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4462.0078125 +20 +1747.998046875 +30 +0.0 +11 +4542.01171875 +21 +1785.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4542.01171875 +20 +1785.99609375 +30 +0.0 +11 +4554.01171875 +21 +1839.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4554.01171875 +20 +1839.99609375 +30 +0.0 +11 +4616.015625 +21 +1858.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4616.015625 +20 +1858.001953125 +30 +0.0 +11 +4608.01171875 +21 +1890.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4608.01171875 +20 +1890.0 +30 +0.0 +11 +4563.01171875 +21 +1890.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4563.01171875 +20 +1890.0 +30 +0.0 +11 +4563.01171875 +21 +1927.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4563.01171875 +20 +1927.998046875 +30 +0.0 +11 +4566.01171875 +21 +1938.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4566.01171875 +20 +1938.0 +30 +0.0 +11 +4630.0078125 +21 +1927.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4630.0078125 +20 +1927.998046875 +30 +0.0 +11 +4682.015625 +21 +1938.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4682.015625 +20 +1938.0 +30 +0.0 +11 +4682.015625 +21 +1969.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4682.015625 +20 +1969.998046875 +30 +0.0 +11 +4692.01171875 +21 +2010.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4692.01171875 +20 +2010.0 +30 +0.0 +11 +4790.015625 +21 +2026.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4790.015625 +20 +2026.001953125 +30 +0.0 +11 +4842.01171875 +21 +2043.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4842.01171875 +20 +2043.0 +30 +0.0 +11 +4900.0078125 +21 +2101.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4900.0078125 +20 +2101.998046875 +30 +0.0 +11 +4900.0078125 +21 +2118.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4900.0078125 +20 +2118.0 +30 +0.0 +11 +4871.00390625 +21 +2118.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4871.00390625 +20 +2118.0 +30 +0.0 +11 +4871.00390625 +21 +2131.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4871.00390625 +20 +2131.998046875 +30 +0.0 +11 +4885.51171875 +21 +2154.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4885.51171875 +20 +2154.0 +30 +0.0 +11 +4816.01953125 +21 +2182.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4816.01953125 +20 +2182.001953125 +30 +0.0 +11 +4832.015625 +21 +2202.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4832.015625 +20 +2202.0 +30 +0.0 +11 +4908.01171875 +21 +2168.00390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4908.01171875 +20 +2168.00390625 +30 +0.0 +11 +4990.0078125 +21 +2168.00390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4990.0078125 +20 +2168.00390625 +30 +0.0 +11 +5026.0078125 +21 +2218.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5026.0078125 +20 +2218.001953125 +30 +0.0 +11 +5048.015625 +21 +2251.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4408.01953125 +20 +1381.998046875 +30 +0.0 +11 +4408.01953125 +21 +1491.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4408.01953125 +20 +1491.99609375 +30 +0.0 +11 +4370.015625 +21 +1500.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4370.015625 +20 +1500.0 +30 +0.0 +11 +4274.015625 +21 +1500.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4274.015625 +20 +1500.0 +30 +0.0 +11 +4274.015625 +21 +1539.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4274.015625 +20 +1539.99609375 +30 +0.0 +11 +4240.01953125 +21 +1539.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4240.01953125 +20 +1539.99609375 +30 +0.0 +11 +4222.013671875 +21 +1572.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4222.013671875 +20 +1572.0 +30 +0.0 +11 +4222.013671875 +21 +1602.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4222.013671875 +20 +1602.0 +30 +0.0 +11 +4257.01171875 +21 +1626.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4257.01171875 +20 +1626.0 +30 +0.0 +11 +4274.015625 +21 +1643.00390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4274.015625 +20 +1643.00390625 +30 +0.0 +11 +4265.51953125 +21 +1660.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4265.51953125 +20 +1660.001953125 +30 +0.0 +11 +4308.01171875 +21 +1711.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4308.01171875 +20 +1711.998046875 +30 +0.0 +11 +4286.765625 +21 +1747.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4286.765625 +20 +1747.998046875 +30 +0.0 +11 +4308.01171875 +21 +1767.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4308.01171875 +20 +1767.0 +30 +0.0 +11 +4286.765625 +21 +1785.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4286.765625 +20 +1776.498046875 +30 +0.0 +11 +4308.01171875 +21 +1801.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4308.01171875 +20 +1801.998046875 +30 +0.0 +11 +4286.765625 +21 +1825.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4286.765625 +20 +1825.998046875 +30 +0.0 +11 +4274.015625 +21 +1874.00390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4274.015625 +20 +1874.00390625 +30 +0.0 +11 +4286.765625 +21 +1899.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4286.765625 +20 +1899.99609375 +30 +0.0 +11 +4286.765625 +21 +1953.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4286.765625 +20 +1953.99609375 +30 +0.0 +11 +4308.01171875 +21 +2026.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4308.01171875 +20 +2026.001953125 +30 +0.0 +11 +4322.015625 +21 +2026.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4322.015625 +20 +2026.001953125 +30 +0.0 +11 +4322.015625 +21 +2109.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4322.015625 +20 +2109.99609375 +30 +0.0 +11 +4347.76171875 +21 +2131.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4347.76171875 +20 +2131.998046875 +30 +0.0 +11 +4336.0078125 +21 +2168.00390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4336.0078125 +20 +2168.00390625 +30 +0.0 +11 +4370.015625 +21 +2202.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4370.015625 +20 +2202.0 +30 +0.0 +11 +4370.015625 +21 +2235.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4370.015625 +20 +2235.0 +30 +0.0 +11 +4334.89453125 +21 +2325.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4334.89453125 +20 +2325.0 +30 +0.0 +11 +4363.01953125 +21 +2356.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4363.01953125 +20 +2356.001953125 +30 +0.0 +11 +4359.515625 +21 +2394.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4359.515625 +20 +2394.0 +30 +0.0 +11 +4408.01953125 +21 +2478.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4408.01953125 +20 +2478.0 +30 +0.0 +11 +4430.015625 +21 +2478.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4430.015625 +20 +2478.0 +30 +0.0 +11 +4419.01171875 +21 +2515.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4419.01171875 +20 +2515.998046875 +30 +0.0 +11 +4424.51953125 +21 +2587.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4424.51953125 +20 +2587.998046875 +30 +0.0 +11 +4474.0078125 +21 +2608.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4474.0078125 +20 +2608.001953125 +30 +0.0 +11 +4474.0078125 +21 +2662.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4474.0078125 +20 +2662.001953125 +30 +0.0 +11 +4514.00390625 +21 +2698.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4514.00390625 +20 +2698.001953125 +30 +0.0 +11 +4542.01171875 +21 +2688.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4542.01171875 +20 +2688.0 +30 +0.0 +11 +4585.01953125 +21 +2680.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4585.01953125 +20 +2680.001953125 +30 +0.0 +11 +4591.01953125 +21 +2662.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4591.01953125 +20 +2662.001953125 +30 +0.0 +11 +4612.01953125 +21 +2688.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4612.01953125 +20 +2688.0 +30 +0.0 +11 +4656.01171875 +21 +2684.00390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4656.01171875 +20 +2684.00390625 +30 +0.0 +11 +4670.015625 +21 +2662.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4670.015625 +20 +2662.001953125 +30 +0.0 +11 +4704.01171875 +21 +2635.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4704.01171875 +20 +2635.001953125 +30 +0.0 +11 +4720.0078125 +21 +2618.00390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4720.0078125 +20 +2618.00390625 +30 +0.0 +11 +4764.01171875 +21 +2608.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4764.01171875 +20 +2608.001953125 +30 +0.0 +11 +4816.01953125 +21 +2574.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4808.015625 +20 +2574.0 +30 +0.0 +11 +4850.765625 +21 +2551.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4850.765625 +20 +2551.998046875 +30 +0.0 +11 +4850.765625 +21 +2536.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4850.765625 +20 +2536.001953125 +30 +0.0 +11 +4808.015625 +21 +2478.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4808.015625 +20 +2478.0 +30 +0.0 +11 +4908.01171875 +21 +2467.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4908.01171875 +20 +2467.998046875 +30 +0.0 +11 +4949.00390625 +21 +2478.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4949.00390625 +20 +2478.0 +30 +0.0 +11 +4970.015625 +21 +2507.00390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4970.015625 +20 +2507.00390625 +30 +0.0 +11 +4990.0078125 +21 +2608.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4990.0078125 +20 +2608.001953125 +30 +0.0 +11 +5008.0078125 +21 +2648.501953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5008.0078125 +20 +2648.501953125 +30 +0.0 +11 +5076.01171875 +21 +2698.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5076.01171875 +20 +2698.001953125 +30 +0.0 +11 +5084.015625 +21 +2737.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5084.015625 +20 +2737.998046875 +30 +0.0 +11 +5116.0078125 +21 +2754.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5116.0078125 +20 +2754.0 +30 +0.0 +11 +5116.0078125 +21 +2790.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5116.0078125 +20 +2790.99609375 +30 +0.0 +11 +5037.01171875 +21 +2827.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5037.01171875 +20 +2827.998046875 +30 +0.0 +11 +5022.01171875 +21 +2888.00390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5022.01171875 +20 +2888.00390625 +30 +0.0 +11 +5084.015625 +21 +2929.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5084.015625 +20 +2929.998046875 +30 +0.0 +11 +5116.0078125 +21 +2974.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5116.0078125 +20 +2974.001953125 +30 +0.0 +11 +5136.01171875 +21 +3055.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5136.01171875 +20 +3055.998046875 +30 +0.0 +11 +5126.00390625 +21 +3124.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5126.00390625 +20 +3124.001953125 +30 +0.0 +11 +5150.015625 +21 +3162.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5150.015625 +20 +3162.0 +30 +0.0 +11 +5116.0078125 +21 +3162.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5116.0078125 +20 +3162.0 +30 +0.0 +11 +5116.0078125 +21 +3198.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5116.0078125 +20 +3198.0 +30 +0.0 +11 +5084.015625 +21 +3222.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5084.015625 +20 +3222.0 +30 +0.0 +11 +5116.0078125 +21 +3246.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5116.0078125 +20 +3246.0 +30 +0.0 +11 +5100.01171875 +21 +3288.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5100.01171875 +20 +3288.0 +30 +0.0 +11 +5053.01953125 +21 +3298.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5053.01953125 +20 +3298.001953125 +30 +0.0 +11 +5037.01171875 +21 +3373.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5037.01171875 +20 +3360.99609375 +30 +0.0 +11 +5066.015625 +21 +3429.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5066.015625 +20 +3429.99609375 +30 +0.0 +11 +5084.015625 +21 +3420.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5084.015625 +20 +3420.0 +30 +0.0 +11 +5084.015625 +21 +3447.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5084.015625 +20 +3447.0 +30 +0.0 +11 +5066.015625 +21 +3462.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5066.015625 +20 +3462.0 +30 +0.0 +11 +5066.015625 +21 +3526.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5066.015625 +20 +3526.001953125 +30 +0.0 +11 +5029.51171875 +21 +3588.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5029.51171875 +20 +3588.0 +30 +0.0 +11 +4970.015625 +21 +3631.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4970.015625 +20 +3631.998046875 +30 +0.0 +11 +4970.015625 +21 +3660.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4970.015625 +20 +3660.0 +30 +0.0 +11 +4918.0078125 +21 +3660.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4918.0078125 +20 +3660.0 +30 +0.0 +11 +4918.0078125 +21 +3625.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4918.0078125 +20 +3625.998046875 +30 +0.0 +11 +4892.015625 +21 +3631.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4892.015625 +20 +3631.998046875 +30 +0.0 +11 +4850.765625 +21 +3718.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4850.765625 +20 +3718.998046875 +30 +0.0 +11 +4850.765625 +21 +3757.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4850.765625 +20 +3757.998046875 +30 +0.0 +11 +4871.390625 +21 +3757.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4871.390625 +20 +3757.998046875 +30 +0.0 +11 +4871.390625 +21 +3792.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4871.390625 +20 +3792.0 +30 +0.0 +11 +4999.0078125 +21 +3792.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4999.0078125 +20 +3792.0 +30 +0.0 +11 +5053.01953125 +21 +3757.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5053.01953125 +20 +3757.998046875 +30 +0.0 +11 +5053.01953125 +21 +6126.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5644.0078125 +20 +3075.99609375 +30 +0.0 +11 +5658.01171875 +21 +3120.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5658.01171875 +20 +3120.0 +30 +0.0 +11 +5716.01953125 +21 +3162.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5716.01953125 +20 +3162.0 +30 +0.0 +11 +5756.015625 +21 +3222.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5756.015625 +20 +3222.0 +30 +0.0 +11 +5756.015625 +21 +3298.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5756.015625 +20 +3298.001953125 +30 +0.0 +11 +5726.015625 +21 +3348.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5726.015625 +20 +3348.0 +30 +0.0 +11 +5687.015625 +21 +3348.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5687.015625 +20 +3348.0 +30 +0.0 +11 +5644.0078125 +21 +3373.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5644.0078125 +20 +3373.998046875 +30 +0.0 +11 +5644.0078125 +21 +6147.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5053.01953125 +20 +6126.0 +30 +0.0 +11 +4998.01171875 +21 +6183.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4998.01171875 +20 +6183.99609375 +30 +0.0 +11 +4990.0078125 +21 +6216.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4990.0078125 +20 +6216.99609375 +30 +0.0 +11 +5008.01953125 +21 +6238.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5008.01953125 +20 +6238.998046875 +30 +0.0 +11 +4956.01171875 +21 +6318.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4956.01171875 +20 +6318.0 +30 +0.0 +11 +4956.01171875 +21 +6384.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4956.01171875 +20 +6384.0 +30 +0.0 +11 +4903.01953125 +21 +6396.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4903.01953125 +20 +6396.0 +30 +0.0 +11 +4903.01953125 +21 +6432.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4903.01953125 +20 +6432.0 +30 +0.0 +11 +4846.01953125 +21 +6516.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4846.01953125 +20 +6516.99609375 +30 +0.0 +11 +4782.01171875 +21 +6567.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4782.01171875 +20 +6567.99609375 +30 +0.0 +11 +4658.015625 +21 +6567.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4658.015625 +20 +6567.99609375 +30 +0.0 +11 +4617.515625 +21 +6580.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4617.515625 +20 +6580.001953125 +30 +0.0 +11 +4456.0078125 +21 +6693.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +4766.015625 +20 +6816.0 +30 +0.0 +11 +5053.01953125 +21 +6832.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5053.01953125 +20 +6832.998046875 +30 +0.0 +11 +5053.01953125 +21 +7122.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5648.015625 +20 +7122.0 +30 +0.0 +11 +5648.015625 +21 +6877.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6240.01171875 +20 +7122.0 +30 +0.0 +11 +6240.01171875 +21 +6849.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6240.01171875 +20 +6849.99609375 +30 +0.0 +11 +6044.00390625 +21 +6877.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6044.00390625 +20 +6877.998046875 +30 +0.0 +11 +5648.015625 +21 +6877.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6240.01171875 +20 +6849.99609375 +30 +0.0 +11 +6418.0078125 +21 +6807.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6418.0078125 +20 +6807.0 +30 +0.0 +11 +6618.01171875 +21 +6807.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6618.01171875 +20 +6807.0 +30 +0.0 +11 +6666.01171875 +21 +6798.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6666.01171875 +20 +6798.0 +30 +0.0 +11 +6642.01171875 +21 +6771.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6654.01171875 +20 +6771.99609375 +30 +0.0 +11 +6456.01171875 +21 +6729.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6456.01171875 +20 +6729.99609375 +30 +0.0 +11 +6446.00390625 +21 +6636.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6446.00390625 +20 +6636.99609375 +30 +0.0 +11 +6418.0078125 +21 +6580.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6418.0078125 +20 +6580.001953125 +30 +0.0 +11 +6432.01171875 +21 +6542.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6432.01171875 +20 +6542.49609375 +30 +0.0 +11 +6456.01171875 +21 +6542.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6456.01171875 +20 +6542.49609375 +30 +0.0 +11 +6451.0078125 +21 +6516.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6451.0078125 +20 +6516.99609375 +30 +0.0 +11 +6376.0078125 +21 +6504.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6376.0078125 +20 +6504.0 +30 +0.0 +11 +6288.01171875 +21 +6442.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6288.01171875 +20 +6442.001953125 +30 +0.0 +11 +6276.01171875 +21 +6414.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6276.01171875 +20 +6414.0 +30 +0.0 +11 +6300.01171875 +21 +6373.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6300.01171875 +20 +6373.998046875 +30 +0.0 +11 +6300.01171875 +21 +6351.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6300.01171875 +20 +6351.0 +30 +0.0 +11 +6240.01171875 +21 +6318.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6240.01171875 +20 +6318.0 +30 +0.0 +11 +6084.01171875 +21 +6273.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6084.01171875 +20 +6273.99609375 +30 +0.0 +11 +5864.00390625 +21 +6253.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5864.00390625 +20 +6253.998046875 +30 +0.0 +11 +5784.01171875 +21 +6183.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5784.01171875 +20 +6183.99609375 +30 +0.0 +11 +5648.015625 +21 +6147.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6836.00390625 +20 +7122.0 +30 +0.0 +11 +6836.00390625 +21 +6238.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6836.00390625 +20 +6238.998046875 +30 +0.0 +11 +6134.00390625 +21 +6238.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6134.00390625 +20 +6238.998046875 +30 +0.0 +11 +6134.00390625 +21 +6043.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6134.00390625 +20 +6043.998046875 +30 +0.0 +11 +6240.01171875 +21 +6043.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6836.00390625 +20 +6043.998046875 +30 +0.0 +11 +6836.00390625 +21 +5751.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6826.0078125 +20 +5751.99609375 +30 +0.0 +11 +6810.01171875 +21 +5751.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6810.01171875 +20 +5751.99609375 +30 +0.0 +11 +6786.01171875 +21 +5718.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6786.01171875 +20 +5718.0 +30 +0.0 +11 +6744.01171875 +21 +5718.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6744.01171875 +20 +5718.0 +30 +0.0 +11 +6720.01171875 +21 +5697.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6720.01171875 +20 +5697.99609375 +30 +0.0 +11 +6732.01171875 +21 +5667.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6732.01171875 +20 +5667.99609375 +30 +0.0 +11 +6765.01171875 +21 +5655.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6765.01171875 +20 +5655.0 +30 +0.0 +11 +6720.01171875 +21 +5620.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6720.01171875 +20 +5620.998046875 +30 +0.0 +11 +6732.01171875 +21 +5586.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6732.01171875 +20 +5586.0 +30 +0.0 +11 +6798.01171875 +21 +5586.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6798.01171875 +20 +5586.0 +30 +0.0 +11 +6826.0078125 +21 +5603.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6826.0078125 +20 +5603.49609375 +30 +0.0 +11 +6826.0078125 +21 +5293.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6240.01171875 +20 +6043.998046875 +30 +0.0 +11 +6240.01171875 +21 +5151.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6240.01171875 +20 +5151.99609375 +30 +0.0 +11 +5876.00390625 +21 +5151.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5876.00390625 +20 +5151.99609375 +30 +0.0 +11 +5876.00390625 +21 +5004.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +5876.00390625 +20 +5004.0 +30 +0.0 +11 +6240.01171875 +21 +5004.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6240.01171875 +20 +5004.0 +30 +0.0 +11 +6240.01171875 +21 +4290.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6240.01171875 +20 +4290.0 +30 +0.0 +11 +6040.0078125 +21 +4290.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6040.0078125 +20 +4290.0 +30 +0.0 +11 +6040.0078125 +21 +4086.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6040.0078125 +20 +4086.0 +30 +0.0 +11 +6236.015625 +21 +4086.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6832.01953125 +20 +3728.00390625 +30 +0.0 +11 +6780.01171875 +21 +3757.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6780.01171875 +20 +3757.998046875 +30 +0.0 +11 +6616.0078125 +21 +3861.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6616.0078125 +20 +3861.99609375 +30 +0.0 +11 +6604.0078125 +21 +3925.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6604.0078125 +20 +3925.998046875 +30 +0.0 +11 +6546.01171875 +21 +3990.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6546.01171875 +20 +3990.0 +30 +0.0 +11 +6496.01953125 +21 +3990.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6496.01953125 +20 +3990.0 +30 +0.0 +11 +6486.01171875 +21 +4015.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6486.01171875 +20 +4015.998046875 +30 +0.0 +11 +6472.0078125 +21 +4047.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6472.0078125 +20 +4047.99609375 +30 +0.0 +11 +6479.00390625 +21 +4105.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6479.00390625 +20 +4105.998046875 +30 +0.0 +11 +6442.0078125 +21 +4146.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6442.0078125 +20 +4146.0 +30 +0.0 +11 +6479.00390625 +21 +4167.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6479.00390625 +20 +4167.99609375 +30 +0.0 +11 +6486.01171875 +21 +4225.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6486.01171875 +20 +4225.998046875 +30 +0.0 +11 +6496.01953125 +21 +4248.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6496.01953125 +20 +4248.0 +30 +0.0 +11 +6496.01953125 +21 +4299.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6496.01953125 +20 +4299.99609375 +30 +0.0 +11 +6460.51171875 +21 +4371.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6460.51171875 +20 +4371.99609375 +30 +0.0 +11 +6472.0078125 +21 +4423.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6472.0078125 +20 +4423.998046875 +30 +0.0 +11 +6491.015625 +21 +4449.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6491.015625 +20 +4449.99609375 +30 +0.0 +11 +6508.0078125 +21 +4494.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6508.0078125 +20 +4494.0 +30 +0.0 +11 +6546.01171875 +21 +4537.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6546.01171875 +20 +4537.998046875 +30 +0.0 +11 +6546.01171875 +21 +4555.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6546.01171875 +20 +4555.998046875 +30 +0.0 +11 +6562.0078125 +21 +4555.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6562.0078125 +20 +4555.998046875 +30 +0.0 +11 +6562.0078125 +21 +4578.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6562.0078125 +20 +4578.0 +30 +0.0 +11 +6314.00390625 +21 +4578.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6314.00390625 +20 +4578.0 +30 +0.0 +11 +6314.00390625 +21 +4752.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6314.00390625 +20 +4752.0 +30 +0.0 +11 +6546.01171875 +21 +5217.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6546.01171875 +20 +5217.99609375 +30 +0.0 +11 +6786.01171875 +21 +5217.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6786.01171875 +20 +5217.99609375 +30 +0.0 +11 +6765.01171875 +21 +5265.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6765.01171875 +20 +5265.99609375 +30 +0.0 +11 +6798.01171875 +21 +5277.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6798.01171875 +20 +5277.99609375 +30 +0.0 +11 +6826.0078125 +21 +5293.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6786.01171875 +20 +5217.99609375 +30 +0.0 +11 +6812.00390625 +21 +5229.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6812.00390625 +20 +5229.99609375 +30 +0.0 +11 +6818.00390625 +21 +5217.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6818.00390625 +20 +5217.99609375 +30 +0.0 +11 +6878.015625 +21 +5217.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6878.015625 +20 +5217.99609375 +30 +0.0 +11 +6890.015625 +21 +5205.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6890.015625 +20 +5205.99609375 +30 +0.0 +11 +6868.0078125 +21 +5179.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6868.0078125 +20 +5179.998046875 +30 +0.0 +11 +6868.0078125 +21 +5133.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6868.0078125 +20 +5133.99609375 +30 +0.0 +11 +6848.00390625 +21 +5124.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6848.00390625 +20 +5124.0 +30 +0.0 +11 +6858.01171875 +21 +5103.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6858.01171875 +20 +5103.99609375 +30 +0.0 +11 +6848.00390625 +21 +5077.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6848.00390625 +20 +5077.998046875 +30 +0.0 +11 +6858.01171875 +21 +5064.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6858.01171875 +20 +5064.0 +30 +0.0 +11 +6848.00390625 +21 +5041.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6848.00390625 +20 +5041.998046875 +30 +0.0 +11 +6848.00390625 +21 +5025.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6848.00390625 +20 +5025.99609375 +30 +0.0 +11 +6890.015625 +21 +5025.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6890.015625 +20 +5025.99609375 +30 +0.0 +11 +6890.015625 +21 +4993.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6890.015625 +20 +4993.998046875 +30 +0.0 +11 +6922.0078125 +21 +4984.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6922.0078125 +20 +4984.998046875 +30 +0.0 +11 +6948.01171875 +21 +4947.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6948.01171875 +20 +4947.99609375 +30 +0.0 +11 +7022.015625 +21 +4947.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7022.015625 +20 +4947.99609375 +30 +0.0 +11 +7060.0078125 +21 +4947.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7060.0078125 +20 +4947.99609375 +30 +0.0 +11 +7072.0078125 +21 +4929.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7072.0078125 +20 +4929.99609375 +30 +0.0 +11 +7066.0078125 +21 +4870.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7066.0078125 +20 +4870.001953125 +30 +0.0 +11 +7094.015625 +21 +4849.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7094.015625 +20 +4849.998046875 +30 +0.0 +11 +7080.01171875 +21 +4830.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7080.01171875 +20 +4830.0 +30 +0.0 +11 +7022.015625 +21 +4830.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7022.015625 +20 +4830.0 +30 +0.0 +11 +6985.01953125 +21 +4813.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6985.01953125 +20 +4813.998046875 +30 +0.0 +11 +6985.01953125 +21 +4788.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6985.01953125 +20 +4788.0 +30 +0.0 +11 +6922.0078125 +21 +4740.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6922.0078125 +20 +4740.0 +30 +0.0 +11 +6832.01953125 +21 +4723.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6832.01953125 +20 +4723.998046875 +30 +0.0 +11 +6792.01171875 +21 +4698.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6792.01171875 +20 +4698.0 +30 +0.0 +11 +6792.01171875 +21 +4638.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6792.01171875 +20 +4638.0 +30 +0.0 +11 +7178.015625 +21 +4398.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7178.015625 +20 +4398.0 +30 +0.0 +11 +7178.015625 +21 +4380.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7178.015625 +20 +4380.0 +30 +0.0 +11 +7230.01171875 +21 +4354.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7230.01171875 +20 +4354.001953125 +30 +0.0 +11 +7264.0078125 +21 +4354.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7264.0078125 +20 +4354.001953125 +30 +0.0 +11 +7264.0078125 +21 +4312.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7264.0078125 +20 +4312.001953125 +30 +0.0 +11 +7306.0078125 +21 +4312.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7306.0078125 +20 +4312.001953125 +30 +0.0 +11 +7306.0078125 +21 +4206.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7306.0078125 +20 +4206.0 +30 +0.0 +11 +7274.015625 +21 +4156.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7274.015625 +20 +4156.998046875 +30 +0.0 +11 +7145.09765625 +21 +4146.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7145.09765625 +20 +4146.0 +30 +0.0 +11 +7145.09765625 +21 +4105.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7145.09765625 +20 +4105.998046875 +30 +0.0 +11 +7178.015625 +21 +4105.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7178.015625 +20 +4105.998046875 +30 +0.0 +11 +7178.015625 +21 +4077.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7178.015625 +20 +4077.0 +30 +0.0 +11 +7230.01171875 +21 +4056.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7230.01171875 +20 +4056.0 +30 +0.0 +11 +7230.01171875 +21 +4015.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7230.01171875 +20 +4015.998046875 +30 +0.0 +11 +7194.01171875 +21 +4002.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7194.01171875 +20 +4002.99609375 +30 +0.0 +11 +7161.55078125 +21 +3990.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7161.55078125 +20 +3990.0 +30 +0.0 +11 +7177.78125 +21 +3957.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7177.78125 +20 +3957.99609375 +30 +0.0 +11 +7194.01171875 +21 +3957.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7194.01171875 +20 +3957.99609375 +30 +0.0 +11 +7194.01171875 +21 +3925.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7194.01171875 +20 +3925.998046875 +30 +0.0 +11 +7204.01953125 +21 +3912.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7204.01953125 +20 +3912.0 +30 +0.0 +11 +7204.01953125 +21 +3810.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7204.01953125 +20 +3810.0 +30 +0.0 +11 +7264.0078125 +21 +3810.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7264.0078125 +20 +3810.0 +30 +0.0 +11 +7306.0078125 +21 +3810.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7306.0078125 +20 +3810.0 +30 +0.0 +11 +7338.01171875 +21 +3787.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7338.01171875 +20 +3787.998046875 +30 +0.0 +11 +7362.01171875 +21 +3743.00390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7362.01171875 +20 +3743.00390625 +30 +0.0 +11 +7372.0078125 +21 +3728.00390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7372.0078125 +20 +3728.00390625 +30 +0.0 +11 +7434.01171875 +21 +3735.50390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7434.01171875 +20 +3735.50390625 +30 +0.0 +11 +7434.01171875 +21 +3522.263671875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7434.01171875 +20 +3522.263671875 +30 +0.0 +11 +7234.01953125 +21 +3522.263671875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7234.01953125 +20 +3522.263671875 +30 +0.0 +11 +7234.01953125 +21 +3403.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7247.00390625 +20 +3403.998046875 +30 +0.0 +11 +7424.015625 +21 +3403.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7432.0078125 +20 +7122.0 +30 +0.0 +11 +7432.0078125 +21 +6069.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7432.0078125 +20 +6069.99609375 +30 +0.0 +11 +7378.0078125 +21 +6043.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7378.0078125 +20 +6043.998046875 +30 +0.0 +11 +7328.00390625 +21 +6021.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7328.00390625 +20 +6021.99609375 +30 +0.0 +11 +7318.0078125 +21 +5961.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7318.0078125 +20 +5961.99609375 +30 +0.0 +11 +7338.01171875 +21 +5946.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7338.01171875 +20 +5946.0 +30 +0.0 +11 +7353.01171875 +21 +5889.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7353.01171875 +20 +5889.99609375 +30 +0.0 +11 +7378.0078125 +21 +5865.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7378.0078125 +20 +5865.99609375 +30 +0.0 +11 +7405.0078125 +21 +5856.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7405.0078125 +20 +5856.0 +30 +0.0 +11 +7432.0078125 +21 +5856.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7432.0078125 +20 +5856.0 +30 +0.0 +11 +7432.0078125 +21 +5682.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7432.0078125 +20 +5682.99609375 +30 +0.0 +11 +7328.00390625 +21 +5667.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7328.00390625 +20 +5667.99609375 +30 +0.0 +11 +7318.0078125 +21 +5637.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7318.0078125 +20 +5637.99609375 +30 +0.0 +11 +7256.00390625 +21 +5594.748046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7256.00390625 +20 +5594.748046875 +30 +0.0 +11 +7194.01171875 +21 +5586.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7194.01171875 +20 +5586.0 +30 +0.0 +11 +7194.01171875 +21 +5548.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7194.01171875 +20 +5548.001953125 +30 +0.0 +11 +7145.09765625 +21 +5536.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7145.09765625 +20 +5536.001953125 +30 +0.0 +11 +7136.00390625 +21 +5512.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7136.00390625 +20 +5512.001953125 +30 +0.0 +11 +7094.015625 +21 +5524.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7094.015625 +20 +5524.001953125 +30 +0.0 +11 +7087.01953125 +21 +5536.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7087.01953125 +20 +5536.001953125 +30 +0.0 +11 +7060.0078125 +21 +5530.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7060.0078125 +20 +5530.001953125 +30 +0.0 +11 +7069.0078125 +21 +5485.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7069.0078125 +20 +5485.998046875 +30 +0.0 +11 +7032.01171875 +21 +5485.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7032.01171875 +20 +5485.998046875 +30 +0.0 +11 +7022.015625 +21 +5496.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7014.01171875 +20 +5496.0 +30 +0.0 +11 +6964.0078125 +21 +5496.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6964.0078125 +20 +5496.0 +30 +0.0 +11 +6935.00390625 +21 +5476.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6935.00390625 +20 +5476.001953125 +30 +0.0 +11 +6964.0078125 +21 +5448.75 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6964.0078125 +20 +5448.75 +30 +0.0 +11 +7003.51171875 +21 +5436.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7003.51171875 +20 +5436.0 +30 +0.0 +11 +7014.01171875 +21 +5436.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7014.01171875 +20 +5436.0 +30 +0.0 +11 +7041.01171875 +21 +5436.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7041.01171875 +20 +5436.0 +30 +0.0 +11 +7050.50390625 +21 +5400.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7050.50390625 +20 +5400.0 +30 +0.0 +11 +7094.015625 +21 +5370.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7094.015625 +20 +5370.0 +30 +0.0 +11 +7073.51953125 +21 +5271.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7073.51953125 +20 +5271.99609375 +30 +0.0 +11 +6826.0078125 +21 +5293.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8028.01171875 +20 +7122.0 +30 +0.0 +11 +8028.01171875 +21 +6784.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8028.01171875 +20 +6784.998046875 +30 +0.0 +11 +8480.015625 +21 +6784.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8480.015625 +20 +6784.998046875 +30 +0.0 +11 +8480.015625 +21 +6561.24609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8480.015625 +20 +6561.24609375 +30 +0.0 +11 +8028.01171875 +21 +6561.24609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8028.01171875 +20 +6561.24609375 +30 +0.0 +11 +8028.01171875 +21 +6363.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8028.01171875 +20 +6363.99609375 +30 +0.0 +11 +8070.01171875 +21 +6378.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8070.01171875 +20 +6378.0 +30 +0.0 +11 +8254.01953125 +21 +6378.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8254.01953125 +20 +6378.0 +30 +0.0 +11 +8334.01171875 +21 +6363.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8334.01171875 +20 +6363.99609375 +30 +0.0 +11 +8430.01171875 +21 +6324.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8430.01171875 +20 +6324.0 +30 +0.0 +11 +8480.015625 +21 +6306.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8480.015625 +20 +6306.0 +30 +0.0 +11 +8560.0078125 +21 +6306.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8560.0078125 +20 +6306.0 +30 +0.0 +11 +8626.0078125 +21 +6285.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8626.0078125 +20 +6285.99609375 +30 +0.0 +11 +8626.0078125 +21 +6680.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8626.0078125 +20 +6680.49609375 +30 +0.0 +11 +8560.0078125 +21 +6680.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8560.0078125 +20 +6680.49609375 +30 +0.0 +11 +8560.0078125 +21 +6784.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8560.0078125 +20 +6784.998046875 +30 +0.0 +11 +8626.0078125 +21 +6784.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8626.0078125 +20 +6784.998046875 +30 +0.0 +11 +8626.0078125 +21 +7122.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8364.5390625 +20 +6351.275390625 +30 +0.0 +11 +8364.5390625 +21 +6315.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8364.5390625 +20 +6315.0 +30 +0.0 +11 +8334.01171875 +21 +6315.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8334.01171875 +20 +6315.0 +30 +0.0 +11 +8294.015625 +21 +6306.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8294.015625 +20 +6306.0 +30 +0.0 +11 +8264.00390625 +21 +6285.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8264.00390625 +20 +6285.99609375 +30 +0.0 +11 +8264.00390625 +21 +6259.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8264.00390625 +20 +6259.998046875 +30 +0.0 +11 +8324.00390625 +21 +6238.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8324.00390625 +20 +6238.998046875 +30 +0.0 +11 +8334.01171875 +21 +6219.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8334.01171875 +20 +6219.99609375 +30 +0.0 +11 +8279.00390625 +21 +6210.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8279.00390625 +20 +6210.0 +30 +0.0 +11 +8334.01171875 +21 +6165.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8334.01171875 +20 +6165.99609375 +30 +0.0 +11 +8324.00390625 +21 +6144.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8324.00390625 +20 +6144.0 +30 +0.0 +11 +8324.00390625 +21 +6132.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8324.00390625 +20 +6132.0 +30 +0.0 +11 +8349.26953125 +21 +6099.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8349.26953125 +20 +6099.99609375 +30 +0.0 +11 +8342.953125 +21 +6084.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8342.953125 +20 +6084.99609375 +30 +0.0 +11 +8364.5390625 +21 +6057.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8364.5390625 +20 +6057.0 +30 +0.0 +11 +8382.01171875 +21 +6057.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8382.01171875 +20 +6057.0 +30 +0.0 +11 +8382.01171875 +21 +6033.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8382.01171875 +20 +6033.0 +30 +0.0 +11 +8306.5078125 +21 +5982.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8306.5078125 +20 +5982.0 +30 +0.0 +11 +8240.00390625 +21 +5953.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8240.00390625 +20 +5953.998046875 +30 +0.0 +11 +8264.00390625 +21 +5905.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8264.00390625 +20 +5905.998046875 +30 +0.0 +11 +8230.0078125 +21 +5889.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8230.0078125 +20 +5889.99609375 +30 +0.0 +11 +8247.01171875 +21 +5856.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8247.01171875 +20 +5856.0 +30 +0.0 +11 +8230.0078125 +21 +5844.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8230.0078125 +20 +5844.0 +30 +0.0 +11 +8240.00390625 +21 +5817.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8240.00390625 +20 +5817.99609375 +30 +0.0 +11 +8252.00390625 +21 +5785.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8252.00390625 +20 +5785.998046875 +30 +0.0 +11 +8294.00390625 +21 +5785.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8294.00390625 +20 +5785.998046875 +30 +0.0 +11 +8306.5078125 +21 +5769.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8306.5078125 +20 +5769.498046875 +30 +0.0 +11 +8364.5390625 +21 +5769.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8364.5390625 +20 +5769.498046875 +30 +0.0 +11 +8364.5390625 +21 +5718.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8364.5390625 +20 +5718.0 +30 +0.0 +11 +8424.01171875 +21 +5682.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8424.01171875 +20 +5682.99609375 +30 +0.0 +11 +8424.01171875 +21 +5667.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8424.01171875 +20 +5667.99609375 +30 +0.0 +11 +8382.01171875 +21 +5661.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8382.01171875 +20 +5661.498046875 +30 +0.0 +11 +8394.26953125 +21 +5620.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8394.26953125 +20 +5620.998046875 +30 +0.0 +11 +8424.01171875 +21 +5616.375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8424.01171875 +20 +5616.375 +30 +0.0 +11 +8424.01171875 +21 +5637.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8424.01171875 +20 +5637.99609375 +30 +0.0 +11 +8488.0078125 +21 +5641.248046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8488.0078125 +20 +5641.248046875 +30 +0.0 +11 +8508.01171875 +21 +5616.375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8508.01171875 +20 +5616.375 +30 +0.0 +11 +8488.0078125 +21 +5590.37109375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8488.0078125 +20 +5590.37109375 +30 +0.0 +11 +8544.01171875 +21 +5586.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8544.01171875 +20 +5586.0 +30 +0.0 +11 +8554.0078125 +21 +5548.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8554.0078125 +20 +5548.001953125 +30 +0.0 +11 +8626.0078125 +21 +5548.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8626.0078125 +20 +5548.001953125 +30 +0.0 +11 +8626.0078125 +21 +5533.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8626.0078125 +20 +5533.001953125 +30 +0.0 +11 +8696.00390625 +21 +5533.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8696.00390625 +20 +5533.001953125 +30 +0.0 +11 +8724.01171875 +21 +5518.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8724.01171875 +20 +5518.001953125 +30 +0.0 +11 +8710.0078125 +21 +5486.00390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8710.0078125 +20 +5486.00390625 +30 +0.0 +11 +8724.01171875 +21 +5462.37890625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8724.01171875 +20 +5462.37890625 +30 +0.0 +11 +8661.01171875 +21 +5448.75 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8661.01171875 +20 +5448.75 +30 +0.0 +11 +8590.0078125 +21 +5341.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8590.0078125 +20 +5341.998046875 +30 +0.0 +11 +8590.0078125 +21 +5193.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8590.0078125 +20 +5193.0 +30 +0.0 +11 +8724.01171875 +21 +5179.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8724.01171875 +20 +5179.998046875 +30 +0.0 +11 +8788.0078125 +21 +5205.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8294.015625 +20 +6306.0 +30 +0.0 +11 +8294.00390625 +21 +6324.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8294.00390625 +20 +6324.0 +30 +0.0 +11 +8240.00390625 +21 +6343.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8240.00390625 +20 +6343.998046875 +30 +0.0 +11 +8162.015625 +21 +6324.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8162.015625 +20 +6324.0 +30 +0.0 +11 +8162.015625 +21 +6295.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8162.015625 +20 +6295.998046875 +30 +0.0 +11 +8114.015625 +21 +6259.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8114.015625 +20 +6259.998046875 +30 +0.0 +11 +8086.0078125 +21 +6285.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8086.0078125 +20 +6285.99609375 +30 +0.0 +11 +8049.01171875 +21 +6285.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8049.01171875 +20 +6285.99609375 +30 +0.0 +11 +7984.0078125 +21 +6310.5 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7984.0078125 +20 +6310.5 +30 +0.0 +11 +7968.01171875 +21 +6295.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7968.01171875 +20 +6295.998046875 +30 +0.0 +11 +8016.50390625 +21 +6259.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8016.50390625 +20 +6259.998046875 +30 +0.0 +11 +8067.50390625 +21 +6259.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8067.50390625 +20 +6259.998046875 +30 +0.0 +11 +8086.0078125 +21 +6210.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8086.0078125 +20 +6210.0 +30 +0.0 +11 +8076.76171875 +21 +6187.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8076.76171875 +20 +6187.998046875 +30 +0.0 +11 +8100.01171875 +21 +6165.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8100.01171875 +20 +6165.99609375 +30 +0.0 +11 +7958.015625 +21 +6069.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7958.015625 +20 +6069.99609375 +30 +0.0 +11 +7904.015625 +21 +5953.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7904.015625 +20 +5953.998046875 +30 +0.0 +11 +7904.015625 +21 +5917.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7904.015625 +20 +5917.998046875 +30 +0.0 +11 +7984.0078125 +21 +5917.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7984.0078125 +20 +5917.998046875 +30 +0.0 +11 +7968.01171875 +21 +5751.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7968.01171875 +20 +5751.99609375 +30 +0.0 +11 +8042.00390625 +21 +5734.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8042.00390625 +20 +5734.998046875 +30 +0.0 +11 +8042.00390625 +21 +5718.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8042.00390625 +20 +5718.0 +30 +0.0 +11 +8076.76171875 +21 +5707.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8076.76171875 +20 +5707.998046875 +30 +0.0 +11 +8088.38671875 +21 +5652.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8088.38671875 +20 +5652.99609375 +30 +0.0 +11 +8059.3828125 +21 +5628.80859375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8059.3828125 +20 +5628.80859375 +30 +0.0 +11 +8082.57421875 +21 +5603.373046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8082.57421875 +20 +5603.373046875 +30 +0.0 +11 +8100.01171875 +21 +5567.00390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8100.01171875 +20 +5567.00390625 +30 +0.0 +11 +8042.00390625 +21 +5525.501953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8042.00390625 +20 +5525.501953125 +30 +0.0 +11 +8042.00390625 +21 +5502.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8042.00390625 +20 +5502.0 +30 +0.0 +11 +8005.0078125 +21 +5490.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8005.0078125 +20 +5490.99609375 +30 +0.0 +11 +8023.51171875 +21 +5474.19140625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8023.51171875 +20 +5474.19140625 +30 +0.0 +11 +8042.00390625 +21 +5462.37890625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8042.00390625 +20 +5462.37890625 +30 +0.0 +11 +8023.51171875 +21 +5442.375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8023.51171875 +20 +5442.375 +30 +0.0 +11 +7984.0078125 +21 +5395.37109375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7984.0078125 +20 +5395.37109375 +30 +0.0 +11 +7944.01171875 +21 +5385.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7944.01171875 +20 +5385.0 +30 +0.0 +11 +8003.75390625 +21 +5320.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8003.75390625 +20 +5320.998046875 +30 +0.0 +11 +8042.00390625 +21 +5320.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8042.00390625 +20 +5320.998046875 +30 +0.0 +11 +8042.00390625 +21 +5304.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8042.00390625 +20 +5304.0 +30 +0.0 +11 +8023.51171875 +21 +5277.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8023.51171875 +20 +5277.99609375 +30 +0.0 +11 +8059.3828125 +21 +5265.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8059.3828125 +20 +5265.99609375 +30 +0.0 +11 +8032.7578125 +21 +5241.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8032.7578125 +20 +5241.99609375 +30 +0.0 +11 +8032.7578125 +21 +5229.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8032.7578125 +20 +5229.99609375 +30 +0.0 +11 +8059.3828125 +21 +5217.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8059.3828125 +20 +5217.99609375 +30 +0.0 +11 +8059.3828125 +21 +5193.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8059.3828125 +20 +5193.0 +30 +0.0 +11 +8014.25390625 +21 +5179.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8014.25390625 +20 +5179.998046875 +30 +0.0 +11 +7984.0078125 +21 +5179.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7984.0078125 +20 +5179.998046875 +30 +0.0 +11 +7954.0078125 +21 +5142.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7954.0078125 +20 +5142.0 +30 +0.0 +11 +7904.015625 +21 +5142.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7904.015625 +20 +5142.0 +30 +0.0 +11 +7944.01171875 +21 +5113.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7944.01171875 +20 +5113.998046875 +30 +0.0 +11 +7954.0078125 +21 +5103.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7954.0078125 +20 +5103.99609375 +30 +0.0 +11 +7954.0078125 +21 +5077.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7954.0078125 +20 +5077.998046875 +30 +0.0 +11 +7954.0078125 +21 +5052.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7954.0078125 +20 +5052.99609375 +30 +0.0 +11 +7984.0078125 +21 +5041.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7984.0078125 +20 +5041.998046875 +30 +0.0 +11 +7984.0078125 +21 +5010.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7984.0078125 +20 +5010.0 +30 +0.0 +11 +8022.87890625 +21 +5010.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8022.87890625 +20 +5010.0 +30 +0.0 +11 +8032.7578125 +21 +5010.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8032.7578125 +20 +5010.0 +30 +0.0 +11 +8032.7578125 +21 +4870.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8032.7578125 +20 +4870.001953125 +30 +0.0 +11 +8059.3828125 +21 +4849.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8059.3828125 +20 +4849.998046875 +30 +0.0 +11 +8100.01171875 +21 +4830.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8100.01171875 +20 +4830.0 +30 +0.0 +11 +8138.00390625 +21 +4830.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8138.00390625 +20 +4830.0 +30 +0.0 +11 +8138.00390625 +21 +4813.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8138.00390625 +20 +4813.998046875 +30 +0.0 +11 +8119.0078125 +21 +4800.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8119.0078125 +20 +4800.99609375 +30 +0.0 +11 +8138.00390625 +21 +4776.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8138.00390625 +20 +4776.0 +30 +0.0 +11 +8119.0078125 +21 +4752.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8119.0078125 +20 +4752.0 +30 +0.0 +11 +8138.00390625 +21 +4723.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8138.00390625 +20 +4723.998046875 +30 +0.0 +11 +8138.00390625 +21 +4354.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8138.00390625 +20 +4354.001953125 +30 +0.0 +11 +8086.0078125 +21 +4333.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8086.0078125 +20 +4333.001953125 +30 +0.0 +11 +8086.0078125 +21 +4181.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8086.0078125 +20 +4181.49609375 +30 +0.0 +11 +8052.01171875 +21 +4181.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8052.01171875 +20 +4181.49609375 +30 +0.0 +11 +8028.01171875 +21 +4105.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8028.01171875 +20 +4105.998046875 +30 +0.0 +11 +8008.0078125 +21 +4066.5 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8008.0078125 +20 +4066.5 +30 +0.0 +11 +8028.01171875 +21 +4056.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8028.01171875 +20 +4056.0 +30 +0.0 +11 +8028.01171875 +21 +4015.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8028.01171875 +20 +4015.998046875 +30 +0.0 +11 +8040.01171875 +21 +3973.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8040.01171875 +20 +3973.998046875 +30 +0.0 +11 +8086.0078125 +21 +3942.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8086.0078125 +20 +3942.0 +30 +0.0 +11 +8069.00390625 +21 +3894.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8069.00390625 +20 +3894.0 +30 +0.0 +11 +8096.015625 +21 +3894.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8096.015625 +20 +3894.0 +30 +0.0 +11 +8096.015625 +21 +3882.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8096.015625 +20 +3882.0 +30 +0.0 +11 +8122.0078125 +21 +3882.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8122.0078125 +20 +3882.0 +30 +0.0 +11 +8138.00390625 +21 +3843.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8138.00390625 +20 +3843.99609375 +30 +0.0 +11 +8194.0078125 +21 +3823.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8194.0078125 +20 +3823.998046875 +30 +0.0 +11 +8194.0078125 +21 +3810.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8194.0078125 +20 +3810.0 +30 +0.0 +11 +8222.015625 +21 +3787.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8222.015625 +20 +3787.998046875 +30 +0.0 +11 +8222.015625 +21 +3757.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8222.015625 +20 +3757.998046875 +30 +0.0 +11 +8182.0078125 +21 +3743.00390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8182.0078125 +20 +3743.00390625 +30 +0.0 +11 +8122.0078125 +21 +3757.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8122.0078125 +20 +3757.998046875 +30 +0.0 +11 +8034.01171875 +21 +3735.50390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8034.01171875 +20 +3735.50390625 +30 +0.0 +11 +8028.01171875 +21 +3717.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8028.01171875 +20 +3717.99609375 +30 +0.0 +11 +8069.00390625 +21 +3708.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8069.00390625 +20 +3708.0 +30 +0.0 +11 +8048.5078125 +21 +3690.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8048.5078125 +20 +3690.0 +30 +0.0 +11 +8048.5078125 +21 +3661.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8058.76171875 +20 +3661.998046875 +30 +0.0 +11 +8082.50390625 +21 +3645.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8082.50390625 +20 +3645.99609375 +30 +0.0 +11 +8034.01171875 +21 +3645.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8034.01171875 +20 +3645.99609375 +30 +0.0 +11 +8018.00390625 +21 +3613.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8018.00390625 +20 +3613.998046875 +30 +0.0 +11 +8070.6328125 +21 +3522.263671875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8070.6328125 +20 +3522.263671875 +30 +0.0 +11 +8109.01171875 +21 +3492.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8109.01171875 +20 +3492.0 +30 +0.0 +11 +8109.01171875 +21 +3474.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8109.01171875 +20 +3474.0 +30 +0.0 +11 +8018.00390625 +21 +3474.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8018.00390625 +20 +3474.0 +30 +0.0 +11 +7962.01171875 +21 +3453.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7962.01171875 +20 +3453.99609375 +30 +0.0 +11 +7954.0078125 +21 +3414.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7954.0078125 +20 +3414.0 +30 +0.0 +11 +7942.0078125 +21 +3333.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7942.0078125 +20 +3333.99609375 +30 +0.0 +11 +7914.01171875 +21 +3316.5234375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7914.01171875 +20 +3316.5234375 +30 +0.0 +11 +7914.01171875 +21 +3279.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7914.01171875 +20 +3279.99609375 +30 +0.0 +11 +7948.0078125 +21 +3279.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7948.0078125 +20 +3279.99609375 +30 +0.0 +11 +7958.00390625 +21 +3265.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7958.00390625 +20 +3265.998046875 +30 +0.0 +11 +8006.00390625 +21 +3265.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8006.00390625 +20 +3265.998046875 +30 +0.0 +11 +8006.00390625 +21 +3183.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8006.00390625 +20 +3183.99609375 +30 +0.0 +11 +8020.0078125 +21 +3150.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8020.0078125 +20 +3150.0 +30 +0.0 +11 +8018.00390625 +21 +3109.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8018.00390625 +20 +3109.998046875 +30 +0.0 +11 +8089.81640625 +21 +3109.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8089.81640625 +20 +3109.998046875 +30 +0.0 +11 +8089.81640625 +21 +3037.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8089.81640625 +20 +3037.998046875 +30 +0.0 +11 +8006.00390625 +21 +3037.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8006.00390625 +20 +3037.998046875 +30 +0.0 +11 +8006.00390625 +21 +2905.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8006.00390625 +20 +2905.998046875 +30 +0.0 +11 +8063.5078125 +21 +2860.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8063.5078125 +20 +2860.001953125 +30 +0.0 +11 +8020.0078125 +21 +2844.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8020.0078125 +20 +2844.0 +30 +0.0 +11 +7902.01171875 +21 +2844.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7902.01171875 +20 +2844.0 +30 +0.0 +11 +7866.01171875 +21 +2869.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7866.01171875 +20 +2869.998046875 +30 +0.0 +11 +7688.00390625 +21 +2869.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7676.00390625 +20 +2869.998046875 +30 +0.0 +11 +7658.00390625 +21 +2883.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7658.00390625 +20 +2883.0 +30 +0.0 +11 +7632.01171875 +21 +2869.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7632.01171875 +20 +2869.998046875 +30 +0.0 +11 +7602.01171875 +21 +2876.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7602.01171875 +20 +2876.49609375 +30 +0.0 +11 +7592.00390625 +21 +2856.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7592.00390625 +20 +2856.99609375 +30 +0.0 +11 +7617.01171875 +21 +2815.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7617.01171875 +20 +2815.998046875 +30 +0.0 +11 +7688.00390625 +21 +2697.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7688.00390625 +20 +2697.99609375 +30 +0.0 +11 +7718.00390625 +21 +2667.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7718.00390625 +20 +2667.99609375 +30 +0.0 +11 +7703.00390625 +21 +2593.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7703.00390625 +20 +2593.998046875 +30 +0.0 +11 +7730.00390625 +21 +2581.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7730.00390625 +20 +2581.998046875 +30 +0.0 +11 +7730.00390625 +21 +2520.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7730.00390625 +20 +2520.0 +30 +0.0 +11 +7754.00390625 +21 +2451.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7754.00390625 +20 +2451.99609375 +30 +0.0 +11 +7792.0078125 +21 +2427.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7792.0078125 +20 +2427.99609375 +30 +0.0 +11 +7814.00390625 +21 +2391.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7814.00390625 +20 +2391.99609375 +30 +0.0 +11 +7814.00390625 +21 +2370.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7814.00390625 +20 +2370.0 +30 +0.0 +11 +7866.01171875 +21 +2293.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7866.01171875 +20 +2293.998046875 +30 +0.0 +11 +7866.01171875 +21 +2277.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7866.01171875 +20 +2277.99609375 +30 +0.0 +11 +7848.01171875 +21 +2251.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7848.01171875 +20 +2251.998046875 +30 +0.0 +11 +7866.01171875 +21 +2227.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7866.01171875 +20 +2227.998046875 +30 +0.0 +11 +7866.01171875 +21 +2202.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7866.01171875 +20 +2202.0 +30 +0.0 +11 +7928.00390625 +21 +2175.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7928.00390625 +20 +2175.99609375 +30 +0.0 +11 +7948.0078125 +21 +2188.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7948.0078125 +20 +2188.998046875 +30 +0.0 +11 +7982.00390625 +21 +2202.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +7982.00390625 +20 +2202.0 +30 +0.0 +11 +8006.00390625 +21 +2195.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8006.00390625 +20 +2195.49609375 +30 +0.0 +11 +8020.0078125 +21 +2215.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8616.01171875 +20 +2860.001953125 +30 +0.0 +11 +8714.015625 +21 +2905.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8714.015625 +20 +2905.998046875 +30 +0.0 +11 +8756.015625 +21 +2959.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8756.015625 +20 +2959.998046875 +30 +0.0 +11 +8756.015625 +21 +2980.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8756.015625 +20 +2980.001953125 +30 +0.0 +11 +8735.015625 +21 +3006.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8735.015625 +20 +3006.0 +30 +0.0 +11 +8745.515625 +21 +3109.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8745.515625 +20 +3109.998046875 +30 +0.0 +11 +8756.015625 +21 +3129.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8756.015625 +20 +3129.99609375 +30 +0.0 +11 +8740.265625 +21 +3150.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8740.265625 +20 +3150.0 +30 +0.0 +11 +8714.015625 +21 +3123.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8727.140625 +20 +3123.99609375 +30 +0.0 +11 +8636.015625 +21 +3109.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8636.015625 +20 +3109.998046875 +30 +0.0 +11 +8636.015625 +21 +3094.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8636.015625 +20 +3094.001953125 +30 +0.0 +11 +8562.01171875 +21 +3094.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8562.01171875 +20 +3094.001953125 +30 +0.0 +11 +8554.0078125 +21 +3109.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8554.0078125 +20 +3109.998046875 +30 +0.0 +11 +8518.0078125 +21 +3109.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8518.0078125 +20 +3109.998046875 +30 +0.0 +11 +8496.01171875 +21 +3183.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8496.01171875 +20 +3183.99609375 +30 +0.0 +11 +8444.015625 +21 +3183.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8444.015625 +20 +3183.99609375 +30 +0.0 +11 +8360.015625 +21 +3210.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8360.015625 +20 +3210.0 +30 +0.0 +11 +8336.015625 +21 +3279.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8336.015625 +20 +3279.99609375 +30 +0.0 +11 +8312.015625 +21 +3289.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8312.015625 +20 +3289.998046875 +30 +0.0 +11 +8290.0078125 +21 +3373.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8290.0078125 +20 +3373.998046875 +30 +0.0 +11 +8336.015625 +21 +3403.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8336.015625 +20 +3403.998046875 +30 +0.0 +11 +8376.01171875 +21 +3414.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8376.01171875 +20 +3414.0 +30 +0.0 +11 +8376.01171875 +21 +3433.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8376.01171875 +20 +3433.998046875 +30 +0.0 +11 +8348.015625 +21 +3453.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8348.015625 +20 +3453.99609375 +30 +0.0 +11 +8376.01171875 +21 +3474.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8376.01171875 +20 +3474.0 +30 +0.0 +11 +8362.01953125 +21 +3507.12890625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8362.01953125 +20 +3507.12890625 +30 +0.0 +11 +8313.01171875 +21 +3507.12890625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8313.01171875 +20 +3507.12890625 +30 +0.0 +11 +8313.01171875 +21 +3558.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8313.01171875 +20 +3558.0 +30 +0.0 +11 +8336.015625 +21 +3604.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8336.015625 +20 +3604.001953125 +30 +0.0 +11 +8384.015625 +21 +3645.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8384.015625 +20 +3645.99609375 +30 +0.0 +11 +8360.015625 +21 +3661.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8360.015625 +20 +3661.998046875 +30 +0.0 +11 +8369.015625 +21 +3708.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8369.015625 +20 +3708.0 +30 +0.0 +11 +8402.015625 +21 +3712.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8402.015625 +20 +3712.998046875 +30 +0.0 +11 +8470.01953125 +21 +3712.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8470.01953125 +20 +3712.998046875 +30 +0.0 +11 +8496.01171875 +21 +3735.50390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8496.01171875 +20 +3735.50390625 +30 +0.0 +11 +8554.0078125 +21 +3735.50390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8554.0078125 +20 +3735.50390625 +30 +0.0 +11 +8558.00390625 +21 +3772.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8558.00390625 +20 +3772.998046875 +30 +0.0 +11 +8536.0078125 +21 +3772.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8536.0078125 +20 +3772.998046875 +30 +0.0 +11 +8518.0078125 +21 +3823.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8518.0078125 +20 +3823.998046875 +30 +0.0 +11 +8470.01953125 +21 +3862.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8470.01953125 +20 +3862.998046875 +30 +0.0 +11 +8444.015625 +21 +3862.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8444.015625 +20 +3862.998046875 +30 +0.0 +11 +8457.01171875 +21 +3894.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8457.01171875 +20 +3894.0 +30 +0.0 +11 +8494.01953125 +21 +3894.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8494.01953125 +20 +3894.0 +30 +0.0 +11 +8483.015625 +21 +3957.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8475.515625 +20 +3942.0 +30 +0.0 +11 +8496.01171875 +21 +3984.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8496.01171875 +20 +3984.0 +30 +0.0 +11 +8527.0078125 +21 +3984.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8527.0078125 +20 +3984.0 +30 +0.0 +11 +8536.0078125 +21 +4035.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8536.0078125 +20 +4035.99609375 +30 +0.0 +11 +8547.01171875 +21 +4061.25 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8547.01171875 +20 +4061.25 +30 +0.0 +11 +8570.015625 +21 +4061.25 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8570.015625 +20 +4061.25 +30 +0.0 +11 +8590.0078125 +21 +4105.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8590.0078125 +20 +4105.998046875 +30 +0.0 +11 +8580.01171875 +21 +4156.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8580.01171875 +20 +4156.998046875 +30 +0.0 +11 +8602.0078125 +21 +4192.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8602.0078125 +20 +4192.001953125 +30 +0.0 +11 +8602.0078125 +21 +4228.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8602.0078125 +20 +4228.001953125 +30 +0.0 +11 +8657.00390625 +21 +4257.24609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8657.00390625 +20 +4257.24609375 +30 +0.0 +11 +8676.01171875 +21 +4282.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8676.01171875 +20 +4282.001953125 +30 +0.0 +11 +8657.00390625 +21 +4296.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8657.00390625 +20 +4296.0 +30 +0.0 +11 +8657.00390625 +21 +4324.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8657.00390625 +20 +4324.001953125 +30 +0.0 +11 +8629.51171875 +21 +4324.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8629.51171875 +20 +4324.001953125 +30 +0.0 +11 +8629.51171875 +21 +4518.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8629.51171875 +20 +4518.0 +30 +0.0 +11 +8531.5078125 +21 +4666.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8531.5078125 +20 +4666.001953125 +30 +0.0 +11 +8511.50390625 +21 +4666.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8511.50390625 +20 +4666.001953125 +30 +0.0 +11 +8518.0078125 +21 +4723.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8518.0078125 +20 +4723.998046875 +30 +0.0 +11 +8570.015625 +21 +4723.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8570.015625 +20 +4723.998046875 +30 +0.0 +11 +8590.0078125 +21 +4737.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8590.0078125 +20 +4737.99609375 +30 +0.0 +11 +8629.51171875 +21 +4737.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8629.51171875 +20 +4737.99609375 +30 +0.0 +11 +8629.51171875 +21 +4764.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8629.51171875 +20 +4764.0 +30 +0.0 +11 +8657.00390625 +21 +4764.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8657.00390625 +20 +4764.0 +30 +0.0 +11 +8609.75390625 +21 +4813.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8609.75390625 +20 +4813.998046875 +30 +0.0 +11 +8690.015625 +21 +4830.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8690.015625 +20 +4830.0 +30 +0.0 +11 +8676.01171875 +21 +4879.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8676.01171875 +20 +4879.998046875 +30 +0.0 +11 +8774.015625 +21 +4918.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8774.015625 +20 +4918.001953125 +30 +0.0 +11 +8774.015625 +21 +4993.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8774.015625 +20 +4993.998046875 +30 +0.0 +11 +8788.0078125 +21 +5010.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8788.0078125 +20 +5010.0 +30 +0.0 +11 +8806.0078125 +21 +5010.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8806.0078125 +20 +5010.0 +30 +0.0 +11 +8838.01171875 +21 +5041.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8838.01171875 +20 +5041.998046875 +30 +0.0 +11 +8896.0078125 +21 +5025.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8896.0078125 +20 +5025.99609375 +30 +0.0 +11 +8912.015625 +21 +5034.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8912.015625 +20 +5034.0 +30 +0.0 +11 +8886.01171875 +21 +5113.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8886.01171875 +20 +5113.998046875 +30 +0.0 +11 +8904.01171875 +21 +5127.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8904.01171875 +20 +5127.99609375 +30 +0.0 +11 +8867.00390625 +21 +5179.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8867.00390625 +20 +5179.998046875 +30 +0.0 +11 +8838.01171875 +21 +5205.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8838.01171875 +20 +5205.99609375 +30 +0.0 +11 +8788.0078125 +21 +5205.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9214.0078125 +20 +7122.0 +30 +0.0 +11 +9214.0078125 +21 +6843.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9812.00390625 +20 +7122.0 +30 +0.0 +11 +9812.00390625 +21 +6843.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9812.00390625 +20 +6615.99609375 +30 +0.0 +11 +9874.0078125 +21 +6615.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9874.0078125 +20 +6615.99609375 +30 +0.0 +11 +9874.0078125 +21 +6588.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9874.0078125 +20 +6588.0 +30 +0.0 +11 +9812.00390625 +21 +6571.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9812.00390625 +20 +6571.998046875 +30 +0.0 +11 +9812.00390625 +21 +6480.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9214.0078125 +20 +6843.99609375 +30 +0.0 +11 +9812.00390625 +21 +6843.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10406.00390625 +20 +7122.0 +30 +0.0 +11 +10406.00390625 +21 +7035.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10406.00390625 +20 +7035.99609375 +30 +0.0 +11 +9812.00390625 +21 +6793.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9812.00390625 +20 +6390.0 +30 +0.0 +11 +9788.00390625 +21 +6378.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9788.00390625 +20 +6378.0 +30 +0.0 +11 +9776.00390625 +21 +6363.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9776.00390625 +20 +6363.99609375 +30 +0.0 +11 +9812.00390625 +21 +6351.275390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9812.00390625 +20 +6351.275390625 +30 +0.0 +11 +9800.00390625 +21 +6343.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9800.00390625 +20 +6343.998046875 +30 +0.0 +11 +9788.00390625 +21 +6324.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9788.00390625 +20 +6324.0 +30 +0.0 +11 +9794.00390625 +21 +6303.24609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9794.00390625 +20 +6303.24609375 +30 +0.0 +11 +9830.00390625 +21 +6309.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9830.00390625 +20 +6309.99609375 +30 +0.0 +11 +9858.01171875 +21 +6295.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9858.01171875 +20 +6295.998046875 +30 +0.0 +11 +9882.01171875 +21 +6285.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9882.01171875 +20 +6285.99609375 +30 +0.0 +11 +9858.01171875 +21 +6259.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9858.01171875 +20 +6259.998046875 +30 +0.0 +11 +9764.00390625 +21 +6298.248046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9764.00390625 +20 +6298.248046875 +30 +0.0 +11 +9708.01171875 +21 +6306.62109375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9708.01171875 +20 +6306.62109375 +30 +0.0 +11 +9694.0078125 +21 +6285.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9694.0078125 +20 +6285.99609375 +30 +0.0 +11 +9736.0078125 +21 +6279.123046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9736.0078125 +20 +6279.123046875 +30 +0.0 +11 +9728.00390625 +21 +6259.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9728.00390625 +20 +6259.998046875 +30 +0.0 +11 +9764.00390625 +21 +6249.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9764.00390625 +20 +6249.498046875 +30 +0.0 +11 +9764.00390625 +21 +6234.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9764.00390625 +20 +6234.99609375 +30 +0.0 +11 +9715.0078125 +21 +6198.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9715.0078125 +20 +6198.99609375 +30 +0.0 +11 +9630.01171875 +21 +6187.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9630.01171875 +20 +6187.998046875 +30 +0.0 +11 +9630.01171875 +21 +6177.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9630.01171875 +20 +6177.0 +30 +0.0 +11 +9576.01171875 +21 +6154.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9576.01171875 +20 +6154.998046875 +30 +0.0 +11 +9544.0078125 +21 +6132.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9544.0078125 +20 +6132.0 +30 +0.0 +11 +9522.01171875 +21 +6138.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9522.01171875 +20 +6138.0 +30 +0.0 +11 +9496.0078125 +21 +6117.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9496.0078125 +20 +6117.99609375 +30 +0.0 +11 +9509.00390625 +21 +6084.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9509.00390625 +20 +6084.99609375 +30 +0.0 +11 +9474.01171875 +21 +6057.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9474.01171875 +20 +6057.0 +30 +0.0 +11 +9496.0078125 +21 +6033.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9496.0078125 +20 +6033.0 +30 +0.0 +11 +9474.01171875 +21 +5982.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9474.01171875 +20 +5982.0 +30 +0.0 +11 +9390.01171875 +21 +5997.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9390.01171875 +20 +5997.99609375 +30 +0.0 +11 +9306.01171875 +21 +5967.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9306.01171875 +20 +5967.99609375 +30 +0.0 +11 +9230.00390625 +21 +5982.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9230.00390625 +20 +5982.0 +30 +0.0 +11 +9190.0078125 +21 +5967.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9190.0078125 +20 +5967.99609375 +30 +0.0 +11 +9210.01171875 +21 +5935.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9210.01171875 +20 +5935.998046875 +30 +0.0 +11 +9268.0078125 +21 +5935.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9268.0078125 +20 +5935.998046875 +30 +0.0 +11 +9239.00390625 +21 +5905.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9239.00390625 +20 +5905.998046875 +30 +0.0 +11 +9268.0078125 +21 +5898.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9268.0078125 +20 +5898.0 +30 +0.0 +11 +9306.01171875 +21 +5830.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9306.01171875 +20 +5830.998046875 +30 +0.0 +11 +9287.00390625 +21 +5802.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9287.00390625 +20 +5802.0 +30 +0.0 +11 +9296.5078125 +21 +5777.748046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9296.5078125 +20 +5777.748046875 +30 +0.0 +11 +9253.51171875 +21 +5777.748046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9253.51171875 +20 +5777.748046875 +30 +0.0 +11 +9230.00390625 +21 +5789.87109375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9230.00390625 +20 +5789.87109375 +30 +0.0 +11 +9200.00390625 +21 +5769.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9200.00390625 +20 +5769.498046875 +30 +0.0 +11 +9176.00390625 +21 +5777.748046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9176.00390625 +20 +5777.748046875 +30 +0.0 +11 +9078.01171875 +21 +5830.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9078.01171875 +20 +5830.998046875 +30 +0.0 +11 +8990.00390625 +21 +5804.373046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8990.00390625 +20 +5804.373046875 +30 +0.0 +11 +8980.0078125 +21 +5835.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8980.0078125 +20 +5835.0 +30 +0.0 +11 +9022.0078125 +21 +5844.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9022.0078125 +20 +5844.0 +30 +0.0 +11 +9022.0078125 +21 +5864.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9022.0078125 +20 +5864.49609375 +30 +0.0 +11 +8980.0078125 +21 +5856.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8980.0078125 +20 +5856.0 +30 +0.0 +11 +8980.0078125 +21 +5872.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8980.0078125 +20 +5872.998046875 +30 +0.0 +11 +9022.0078125 +21 +5898.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9022.0078125 +20 +5898.0 +30 +0.0 +11 +8968.0078125 +21 +5952.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8968.0078125 +20 +5952.0 +30 +0.0 +11 +9022.0078125 +21 +5989.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9022.0078125 +20 +5989.998046875 +30 +0.0 +11 +9058.0078125 +21 +5974.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9058.0078125 +20 +5974.998046875 +30 +0.0 +11 +9058.0078125 +21 +5929.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9058.0078125 +20 +5929.998046875 +30 +0.0 +11 +9114.01171875 +21 +5901.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9114.01171875 +20 +5901.99609375 +30 +0.0 +11 +9114.01171875 +21 +5925.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9114.01171875 +20 +5925.0 +30 +0.0 +11 +9188.00390625 +21 +5925.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9188.00390625 +20 +5925.0 +30 +0.0 +11 +9200.00390625 +21 +5952.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9296.5078125 +20 +5777.748046875 +30 +0.0 +11 +9241.7578125 +21 +5734.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9241.7578125 +20 +5734.998046875 +30 +0.0 +11 +9253.51171875 +21 +5726.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9253.51171875 +20 +5726.49609375 +30 +0.0 +11 +9253.51171875 +21 +5700.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9253.51171875 +20 +5700.498046875 +30 +0.0 +11 +9215.00390625 +21 +5707.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9215.00390625 +20 +5707.998046875 +30 +0.0 +11 +9200.00390625 +21 +5661.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9200.00390625 +20 +5661.498046875 +30 +0.0 +11 +9166.0078125 +21 +5616.09375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9166.0078125 +20 +5616.09375 +30 +0.0 +11 +9070.0078125 +21 +5548.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9070.0078125 +20 +5548.001953125 +30 +0.0 +11 +9070.0078125 +21 +5533.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9070.0078125 +20 +5533.001953125 +30 +0.0 +11 +9058.0078125 +21 +5525.501953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9058.0078125 +20 +5525.501953125 +30 +0.0 +11 +9022.0078125 +21 +5548.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9022.0078125 +20 +5548.001953125 +30 +0.0 +11 +8990.00390625 +21 +5529.251953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8990.00390625 +20 +5529.251953125 +30 +0.0 +11 +9001.0078125 +21 +5496.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9001.0078125 +20 +5496.498046875 +30 +0.0 +11 +8980.0078125 +21 +5482.59375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8980.0078125 +20 +5482.59375 +30 +0.0 +11 +8990.00390625 +21 +5468.28515625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8990.00390625 +20 +5468.28515625 +30 +0.0 +11 +9006.01171875 +21 +5468.28515625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9006.01171875 +20 +5468.28515625 +30 +0.0 +11 +9022.0078125 +21 +5448.75 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9022.0078125 +20 +5448.75 +30 +0.0 +11 +9058.0078125 +21 +5448.75 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9058.0078125 +20 +5448.75 +30 +0.0 +11 +9078.01171875 +21 +5418.873046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9078.01171875 +20 +5418.873046875 +30 +0.0 +11 +9096.01171875 +21 +5390.185546875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9096.01171875 +20 +5390.185546875 +30 +0.0 +11 +9070.0078125 +21 +5365.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9070.0078125 +20 +5365.998046875 +30 +0.0 +11 +9022.0078125 +21 +5365.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9022.0078125 +20 +5365.998046875 +30 +0.0 +11 +8995.51171875 +21 +5378.091796875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8995.51171875 +20 +5378.091796875 +30 +0.0 +11 +8980.0078125 +21 +5404.529296875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8980.0078125 +20 +5404.529296875 +30 +0.0 +11 +9006.01171875 +21 +5418.873046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9006.01171875 +20 +5418.873046875 +30 +0.0 +11 +8980.0078125 +21 +5442.375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8980.0078125 +20 +5442.375 +30 +0.0 +11 +8944.0078125 +21 +5458.517578125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8944.0078125 +20 +5458.517578125 +30 +0.0 +11 +8899.01953125 +21 +5462.37890625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8899.01953125 +20 +5462.37890625 +30 +0.0 +11 +8867.00390625 +21 +5433.80859375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8867.00390625 +20 +5433.80859375 +30 +0.0 +11 +8838.01171875 +21 +5433.80859375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8838.01171875 +20 +5433.80859375 +30 +0.0 +11 +8822.00390625 +21 +5460.4453125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8822.00390625 +20 +5460.4453125 +30 +0.0 +11 +8806.0078125 +21 +5455.564453125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8806.0078125 +20 +5455.564453125 +30 +0.0 +11 +8806.0078125 +21 +5475.439453125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8806.0078125 +20 +5475.439453125 +30 +0.0 +11 +8830.0078125 +21 +5489.54296875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8830.0078125 +20 +5489.54296875 +30 +0.0 +11 +8830.0078125 +21 +5502.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8830.0078125 +20 +5502.0 +30 +0.0 +11 +8806.0078125 +21 +5502.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8806.0078125 +20 +5502.0 +30 +0.0 +11 +8806.0078125 +21 +5529.251953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8806.0078125 +20 +5529.251953125 +30 +0.0 +11 +8788.0078125 +21 +5538.626953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8788.0078125 +20 +5538.626953125 +30 +0.0 +11 +8781.01171875 +21 +5582.05078125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8781.01171875 +20 +5582.05078125 +30 +0.0 +11 +8806.0078125 +21 +5590.37109375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8806.0078125 +20 +5590.37109375 +30 +0.0 +11 +8830.0078125 +21 +5590.37109375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8830.0078125 +20 +5590.37109375 +30 +0.0 +11 +8830.0078125 +21 +5616.09375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8830.0078125 +20 +5616.09375 +30 +0.0 +11 +8852.5078125 +21 +5641.248046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8852.5078125 +20 +5641.248046875 +30 +0.0 +11 +8980.0078125 +21 +5641.248046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8980.0078125 +20 +5641.248046875 +30 +0.0 +11 +8993.00390625 +21 +5652.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8993.00390625 +20 +5652.99609375 +30 +0.0 +11 +9040.0078125 +21 +5647.125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9040.0078125 +20 +5647.125 +30 +0.0 +11 +9058.0078125 +21 +5652.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9058.0078125 +20 +5652.99609375 +30 +0.0 +11 +9046.0078125 +21 +5675.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9046.0078125 +20 +5675.49609375 +30 +0.0 +11 +9068.00390625 +21 +5700.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9068.00390625 +20 +5700.498046875 +30 +0.0 +11 +9127.0078125 +21 +5688.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9127.0078125 +20 +5688.0 +30 +0.0 +11 +9127.0078125 +21 +5718.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9118.0078125 +20 +5718.0 +30 +0.0 +11 +9166.0078125 +21 +5712.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9166.0078125 +20 +5712.99609375 +30 +0.0 +11 +9188.00390625 +21 +5726.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9188.00390625 +20 +5726.49609375 +30 +0.0 +11 +9215.00390625 +21 +5707.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8788.0078125 +20 +5205.99609375 +30 +0.0 +11 +8788.0078125 +21 +5241.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8788.0078125 +20 +5241.99609375 +30 +0.0 +11 +8724.01171875 +21 +5277.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8724.01171875 +20 +5277.99609375 +30 +0.0 +11 +8774.015625 +21 +5290.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8774.015625 +20 +5290.998046875 +30 +0.0 +11 +8793.50390625 +21 +5271.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8793.50390625 +20 +5271.99609375 +30 +0.0 +11 +8838.01171875 +21 +5271.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8838.01171875 +20 +5271.99609375 +30 +0.0 +11 +8886.01171875 +21 +5241.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8886.01171875 +20 +5241.99609375 +30 +0.0 +11 +8944.0078125 +21 +5241.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8944.0078125 +20 +5241.99609375 +30 +0.0 +11 +8993.00390625 +21 +5217.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8993.00390625 +20 +5217.99609375 +30 +0.0 +11 +9022.0078125 +21 +5193.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9022.0078125 +20 +5193.0 +30 +0.0 +11 +9058.0078125 +21 +5193.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9058.0078125 +20 +5193.0 +30 +0.0 +11 +9068.00390625 +21 +5217.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9068.00390625 +20 +5217.99609375 +30 +0.0 +11 +9014.00390625 +21 +5265.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9014.00390625 +20 +5265.99609375 +30 +0.0 +11 +9030.01171875 +21 +5304.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9030.01171875 +20 +5304.0 +30 +0.0 +11 +9022.0078125 +21 +5320.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9022.0078125 +20 +5320.998046875 +30 +0.0 +11 +9006.01171875 +21 +5304.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9006.01171875 +20 +5304.0 +30 +0.0 +11 +8980.0078125 +21 +5320.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8980.0078125 +20 +5320.998046875 +30 +0.0 +11 +9022.0078125 +21 +5365.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9068.00390625 +20 +5217.99609375 +30 +0.0 +11 +9118.0078125 +21 +5160.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9118.0078125 +20 +5160.99609375 +30 +0.0 +11 +9096.01171875 +21 +5103.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9096.01171875 +20 +5103.99609375 +30 +0.0 +11 +9078.01171875 +21 +5077.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9078.01171875 +20 +5077.998046875 +30 +0.0 +11 +9040.0078125 +21 +5091.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9040.0078125 +20 +5091.0 +30 +0.0 +11 +9041.00390625 +21 +5132.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9041.00390625 +20 +5132.49609375 +30 +0.0 +11 +9014.00390625 +21 +5127.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9014.00390625 +20 +5127.99609375 +30 +0.0 +11 +8986.51171875 +21 +5091.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8986.51171875 +20 +5091.0 +30 +0.0 +11 +8944.0078125 +21 +5091.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8944.0078125 +20 +5091.0 +30 +0.0 +11 +8904.01171875 +21 +5127.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8912.015625 +20 +5034.0 +30 +0.0 +11 +8944.0078125 +21 +4980.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8944.0078125 +20 +4980.0 +30 +0.0 +11 +8980.0078125 +21 +4980.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8980.0078125 +20 +4980.0 +30 +0.0 +11 +8968.51171875 +21 +4940.00390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8968.51171875 +20 +4940.00390625 +30 +0.0 +11 +8944.0078125 +21 +4929.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8944.0078125 +20 +4929.99609375 +30 +0.0 +11 +8944.0078125 +21 +4899.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8944.0078125 +20 +4899.0 +30 +0.0 +11 +8974.25390625 +21 +4860.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8974.25390625 +20 +4860.0 +30 +0.0 +11 +9040.0078125 +21 +4813.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9040.0078125 +20 +4813.998046875 +30 +0.0 +11 +9040.0078125 +21 +4776.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9040.0078125 +20 +4776.0 +30 +0.0 +11 +9063.01171875 +21 +4750.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9063.01171875 +20 +4750.998046875 +30 +0.0 +11 +9118.0078125 +21 +4737.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9118.0078125 +20 +4737.99609375 +30 +0.0 +11 +9183.01171875 +21 +4651.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9192.01171875 +20 +4651.998046875 +30 +0.0 +11 +9222.01171875 +21 +4651.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9222.01171875 +20 +4651.998046875 +30 +0.0 +11 +9240.01171875 +21 +4617.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9240.01171875 +20 +4617.99609375 +30 +0.0 +11 +9284.00390625 +21 +4617.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9284.00390625 +20 +4617.99609375 +30 +0.0 +11 +9306.01171875 +21 +4579.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9306.01171875 +20 +4579.998046875 +30 +0.0 +11 +9348.01171875 +21 +4617.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9348.01171875 +20 +4617.99609375 +30 +0.0 +11 +9396.01171875 +21 +4635.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9396.01171875 +20 +4635.0 +30 +0.0 +11 +9416.00390625 +21 +4579.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9416.00390625 +20 +4579.998046875 +30 +0.0 +11 +9584.00390625 +21 +4551.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9584.00390625 +20 +4551.99609375 +30 +0.0 +11 +9584.00390625 +21 +4599.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9584.00390625 +20 +4599.0 +30 +0.0 +11 +9648.01171875 +21 +4617.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9648.01171875 +20 +4617.99609375 +30 +0.0 +11 +9648.01171875 +21 +4635.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9648.01171875 +20 +4635.0 +30 +0.0 +11 +9630.01171875 +21 +4635.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9630.01171875 +20 +4635.0 +30 +0.0 +11 +9630.01171875 +21 +4666.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9630.01171875 +20 +4666.001953125 +30 +0.0 +11 +9584.00390625 +21 +4695.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9584.00390625 +20 +4695.0 +30 +0.0 +11 +9550.0078125 +21 +4744.5 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9550.0078125 +20 +4744.5 +30 +0.0 +11 +9594.01171875 +21 +4776.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9594.01171875 +20 +4776.0 +30 +0.0 +11 +9594.01171875 +21 +4800.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9594.01171875 +20 +4800.99609375 +30 +0.0 +11 +9550.0078125 +21 +4807.5 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9550.0078125 +20 +4807.5 +30 +0.0 +11 +9540.01171875 +21 +4914.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9540.01171875 +20 +4914.498046875 +30 +0.0 +11 +9572.00390625 +21 +4980.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9572.00390625 +20 +4980.0 +30 +0.0 +11 +9567.01171875 +21 +5010.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9567.01171875 +20 +5010.0 +30 +0.0 +11 +9530.00390625 +21 +5010.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9530.00390625 +20 +5010.0 +30 +0.0 +11 +9486.01171875 +21 +5047.5 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9486.01171875 +20 +5047.5 +30 +0.0 +11 +9444.01171875 +21 +5052.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9444.01171875 +20 +5052.99609375 +30 +0.0 +11 +9406.0078125 +21 +5077.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9406.0078125 +20 +5077.998046875 +30 +0.0 +11 +9327.01171875 +21 +5065.5 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9327.01171875 +20 +5065.5 +30 +0.0 +11 +9306.01171875 +21 +5041.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9306.01171875 +20 +5041.998046875 +30 +0.0 +11 +9284.00390625 +21 +5034.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9284.00390625 +20 +5034.0 +30 +0.0 +11 +9284.00390625 +21 +5010.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9284.00390625 +20 +5010.0 +30 +0.0 +11 +9200.00390625 +21 +5001.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9200.00390625 +20 +5001.99609375 +30 +0.0 +11 +9118.0078125 +21 +5037.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9118.0078125 +20 +5037.99609375 +30 +0.0 +11 +9087.01171875 +21 +5037.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9087.01171875 +20 +5037.99609375 +30 +0.0 +11 +9078.01171875 +21 +5077.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9222.01171875 +20 +4635.0 +30 +0.0 +11 +9222.01171875 +21 +4518.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9222.01171875 +20 +4518.0 +30 +0.0 +11 +9183.01171875 +21 +4509.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9183.01171875 +20 +4509.99609375 +30 +0.0 +11 +9231.01171875 +21 +4471.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9231.01171875 +20 +4471.998046875 +30 +0.0 +11 +9284.00390625 +21 +4455.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9284.00390625 +20 +4455.99609375 +30 +0.0 +11 +9327.01171875 +21 +4455.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9327.01171875 +20 +4455.99609375 +30 +0.0 +11 +9348.01171875 +21 +4429.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9348.01171875 +20 +4429.998046875 +30 +0.0 +11 +9348.01171875 +21 +4404.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9348.01171875 +20 +4404.0 +30 +0.0 +11 +9318.01171875 +21 +4333.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9318.01171875 +20 +4333.001953125 +30 +0.0 +11 +9192.01171875 +21 +4310.00390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9192.01171875 +20 +4310.00390625 +30 +0.0 +11 +9255.01171875 +21 +4228.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9255.01171875 +20 +4228.001953125 +30 +0.0 +11 +9222.01171875 +21 +4210.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9222.01171875 +20 +4210.001953125 +30 +0.0 +11 +9222.01171875 +21 +4105.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9222.01171875 +20 +4105.998046875 +30 +0.0 +11 +9348.01171875 +21 +4105.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9348.01171875 +20 +4105.998046875 +30 +0.0 +11 +9348.01171875 +21 +3973.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9212.015625 +20 +3973.998046875 +30 +0.0 +11 +9348.01171875 +21 +3973.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9808.0078125 +20 +4039.998046875 +30 +0.0 +11 +10078.0078125 +21 +4039.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10078.0078125 +20 +4039.998046875 +30 +0.0 +11 +10078.0078125 +21 +3862.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10078.0078125 +20 +3862.998046875 +30 +0.0 +11 +9808.0078125 +21 +3862.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9808.0078125 +20 +4509.99609375 +30 +0.0 +11 +9794.00390625 +21 +4551.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9794.00390625 +20 +4551.99609375 +30 +0.0 +11 +9780.01171875 +21 +4542.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9780.01171875 +20 +4542.0 +30 +0.0 +11 +9780.01171875 +21 +4566.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9780.01171875 +20 +4566.0 +30 +0.0 +11 +9584.00390625 +21 +4551.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9556.0078125 +20 +4960.001953125 +30 +0.0 +11 +9594.01171875 +21 +4960.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9594.01171875 +20 +4960.001953125 +30 +0.0 +11 +9607.0078125 +21 +4956.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9607.0078125 +20 +4956.0 +30 +0.0 +11 +9639.01171875 +21 +4956.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9639.01171875 +20 +4956.0 +30 +0.0 +11 +9648.01171875 +21 +4980.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9648.01171875 +20 +4980.0 +30 +0.0 +11 +9702.01171875 +21 +4995.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9702.01171875 +20 +4995.0 +30 +0.0 +11 +9702.01171875 +21 +5028.75 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9702.01171875 +20 +5028.75 +30 +0.0 +11 +9756.01171875 +21 +5047.5 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9756.01171875 +20 +5047.5 +30 +0.0 +11 +9824.00390625 +21 +5034.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9824.00390625 +20 +5034.0 +30 +0.0 +11 +9844.0078125 +21 +5022.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9844.0078125 +20 +5022.0 +30 +0.0 +11 +9886.0078125 +21 +5034.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9886.0078125 +20 +5034.0 +30 +0.0 +11 +9924.01171875 +21 +5047.5 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9924.01171875 +20 +5047.5 +30 +0.0 +11 +9943.0078125 +21 +5073.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9943.0078125 +20 +5073.99609375 +30 +0.0 +11 +9960.01171875 +21 +5084.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9960.01171875 +20 +5084.49609375 +30 +0.0 +11 +9982.0078125 +21 +5053.74609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9982.0078125 +20 +5053.74609375 +30 +0.0 +11 +9971.00390625 +21 +5005.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9971.00390625 +20 +5005.998046875 +30 +0.0 +11 +9960.01171875 +21 +4987.5 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9960.01171875 +20 +4987.5 +30 +0.0 +11 +9976.51171875 +21 +4968.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9976.51171875 +20 +4968.0 +30 +0.0 +11 +9982.0078125 +21 +4940.00390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9982.0078125 +20 +4940.00390625 +30 +0.0 +11 +9951.50390625 +21 +4914.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9951.50390625 +20 +4914.498046875 +30 +0.0 +11 +9905.00390625 +21 +4899.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9905.00390625 +20 +4899.0 +30 +0.0 +11 +9924.01171875 +21 +4879.5 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9924.01171875 +20 +4879.5 +30 +0.0 +11 +9896.00390625 +21 +4870.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9896.00390625 +20 +4870.001953125 +30 +0.0 +11 +9886.0078125 +21 +4813.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9886.0078125 +20 +4813.998046875 +30 +0.0 +11 +9844.0078125 +21 +4807.5 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9844.0078125 +20 +4807.5 +30 +0.0 +11 +9808.0078125 +21 +4794.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9808.0078125 +20 +4794.99609375 +30 +0.0 +11 +9787.0078125 +21 +4794.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9787.0078125 +20 +4794.99609375 +30 +0.0 +11 +9756.01171875 +21 +4776.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9756.01171875 +20 +4776.0 +30 +0.0 +11 +9771.50390625 +21 +4750.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9771.50390625 +20 +4750.998046875 +30 +0.0 +11 +9729.01171875 +21 +4723.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9729.01171875 +20 +4723.998046875 +30 +0.0 +11 +9607.0078125 +21 +4723.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9607.0078125 +20 +4723.998046875 +30 +0.0 +11 +9550.0078125 +21 +4744.5 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9824.00390625 +20 +5034.0 +30 +0.0 +11 +9844.0078125 +21 +5071.74609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9844.0078125 +20 +5071.74609375 +30 +0.0 +11 +9834.01171875 +21 +5103.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9834.01171875 +20 +5103.99609375 +30 +0.0 +11 +9800.00390625 +21 +5113.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9800.00390625 +20 +5113.998046875 +30 +0.0 +11 +9788.00390625 +21 +5154.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9788.00390625 +20 +5154.0 +30 +0.0 +11 +9776.00390625 +21 +5217.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9776.00390625 +20 +5217.99609375 +30 +0.0 +11 +9763.7578125 +21 +5223.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9763.7578125 +20 +5223.99609375 +30 +0.0 +11 +9750.2578125 +21 +5241.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9750.2578125 +20 +5241.99609375 +30 +0.0 +11 +9830.00390625 +21 +5265.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9830.00390625 +20 +5265.99609375 +30 +0.0 +11 +9839.00390625 +21 +5290.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9839.00390625 +20 +5290.998046875 +30 +0.0 +11 +9812.00390625 +21 +5320.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9812.00390625 +20 +5320.998046875 +30 +0.0 +11 +9800.00390625 +21 +5390.185546875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9800.00390625 +20 +5390.185546875 +30 +0.0 +11 +9739.51171875 +21 +5390.185546875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9739.51171875 +20 +5390.185546875 +30 +0.0 +11 +9623.00390625 +21 +5418.873046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9623.00390625 +20 +5418.873046875 +30 +0.0 +11 +9681.2578125 +21 +5455.564453125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9681.2578125 +20 +5455.564453125 +30 +0.0 +11 +9672.50390625 +21 +5475.439453125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9672.50390625 +20 +5475.439453125 +30 +0.0 +11 +9623.00390625 +21 +5502.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9623.00390625 +20 +5502.0 +30 +0.0 +11 +9607.0078125 +21 +5525.501953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9607.0078125 +20 +5525.501953125 +30 +0.0 +11 +9623.00390625 +21 +5540.501953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9623.00390625 +20 +5540.501953125 +30 +0.0 +11 +9607.0078125 +21 +5567.00390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9607.0078125 +20 +5567.00390625 +30 +0.0 +11 +9681.2578125 +21 +5582.05078125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9681.2578125 +20 +5582.05078125 +30 +0.0 +11 +9694.0078125 +21 +5560.3359375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9694.0078125 +20 +5560.3359375 +30 +0.0 +11 +9715.0078125 +21 +5582.05078125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9715.0078125 +20 +5582.05078125 +30 +0.0 +11 +9708.01171875 +21 +5618.68359375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9708.01171875 +20 +5618.68359375 +30 +0.0 +11 +9757.0078125 +21 +5637.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9757.0078125 +20 +5637.99609375 +30 +0.0 +11 +9771.50390625 +21 +5661.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9771.50390625 +20 +5661.498046875 +30 +0.0 +11 +9756.01171875 +21 +5694.24609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9756.01171875 +20 +5694.24609375 +30 +0.0 +11 +9764.26171875 +21 +5726.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9764.26171875 +20 +5726.49609375 +30 +0.0 +11 +9858.01171875 +21 +5743.74609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9858.01171875 +20 +5743.74609375 +30 +0.0 +11 +9928.25390625 +21 +5743.74609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9928.25390625 +20 +5743.74609375 +30 +0.0 +11 +9951.50390625 +21 +5789.87109375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9951.50390625 +20 +5789.87109375 +30 +0.0 +11 +9976.51171875 +21 +5804.373046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9976.51171875 +20 +5804.373046875 +30 +0.0 +11 +9971.00390625 +21 +5819.68359375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9971.00390625 +20 +5819.68359375 +30 +0.0 +11 +9939.87890625 +21 +5830.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9939.87890625 +20 +5830.998046875 +30 +0.0 +11 +9928.25390625 +21 +5856.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9928.25390625 +20 +5856.0 +30 +0.0 +11 +9943.0078125 +21 +5872.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9943.0078125 +20 +5872.998046875 +30 +0.0 +11 +9964.0078125 +21 +5872.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9964.0078125 +20 +5872.998046875 +30 +0.0 +11 +9971.00390625 +21 +5856.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9971.00390625 +20 +5856.0 +30 +0.0 +11 +10086.01171875 +21 +5860.248046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10086.01171875 +20 +5860.248046875 +30 +0.0 +11 +10124.015625 +21 +5885.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10124.015625 +20 +5885.49609375 +30 +0.0 +11 +10152.01171875 +21 +5920.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10152.01171875 +20 +5920.998046875 +30 +0.0 +11 +10180.0078125 +21 +5916.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10180.0078125 +20 +5916.0 +30 +0.0 +11 +10196.015625 +21 +5967.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10196.015625 +20 +5967.99609375 +30 +0.0 +11 +10286.00390625 +21 +5967.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10286.00390625 +20 +5967.99609375 +30 +0.0 +11 +10298.00390625 +21 +5952.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10298.00390625 +20 +5952.498046875 +30 +0.0 +11 +10374.01171875 +21 +5967.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10374.01171875 +20 +5967.99609375 +30 +0.0 +11 +10406.00390625 +21 +5960.25 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10406.00390625 +20 +5960.25 +30 +0.0 +11 +10442.00390625 +21 +5974.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10442.00390625 +20 +5974.998046875 +30 +0.0 +11 +10488.01171875 +21 +5960.25 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10488.01171875 +20 +5960.25 +30 +0.0 +11 +10554.01171875 +21 +5997.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10554.01171875 +20 +5997.99609375 +30 +0.0 +11 +10480.0078125 +21 +6019.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10480.0078125 +20 +6019.998046875 +30 +0.0 +11 +10521.01171875 +21 +6045.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10521.01171875 +20 +6045.0 +30 +0.0 +11 +10521.01171875 +21 +6070.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10521.01171875 +20 +6070.998046875 +30 +0.0 +11 +10500.50390625 +21 +6084.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10500.50390625 +20 +6084.99609375 +30 +0.0 +11 +10554.01171875 +21 +6101.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10554.01171875 +20 +6101.49609375 +30 +0.0 +11 +10542.01171875 +21 +6127.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10542.01171875 +20 +6127.998046875 +30 +0.0 +11 +10480.0078125 +21 +6135.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10480.0078125 +20 +6135.0 +30 +0.0 +11 +10480.0078125 +21 +6165.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10480.0078125 +20 +6165.99609375 +30 +0.0 +11 +10442.00390625 +21 +6165.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10442.00390625 +20 +6165.99609375 +30 +0.0 +11 +10424.00390625 +21 +6216.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10424.00390625 +20 +6216.99609375 +30 +0.0 +11 +10406.00390625 +21 +6216.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10406.00390625 +20 +6216.99609375 +30 +0.0 +11 +10374.01171875 +21 +6242.25 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10374.01171875 +20 +6242.25 +30 +0.0 +11 +10415.00390625 +21 +6254.748046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10415.00390625 +20 +6254.748046875 +30 +0.0 +11 +10424.00390625 +21 +6279.123046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10424.00390625 +20 +6279.123046875 +30 +0.0 +11 +10374.01171875 +21 +6306.62109375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10374.01171875 +20 +6306.62109375 +30 +0.0 +11 +10298.00390625 +21 +6306.62109375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10298.00390625 +20 +6306.62109375 +30 +0.0 +11 +10276.0078125 +21 +6313.623046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10276.0078125 +20 +6313.623046875 +30 +0.0 +11 +10276.0078125 +21 +6333.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10276.0078125 +20 +6333.99609375 +30 +0.0 +11 +10336.0078125 +21 +6351.275390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10336.0078125 +20 +6351.275390625 +30 +0.0 +11 +10336.0078125 +21 +6370.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10336.0078125 +20 +6370.998046875 +30 +0.0 +11 +10286.00390625 +21 +6384.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10286.00390625 +20 +6384.0 +30 +0.0 +11 +10320.01171875 +21 +6408.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10320.01171875 +20 +6408.0 +30 +0.0 +11 +10252.0078125 +21 +6426.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10252.0078125 +20 +6426.0 +30 +0.0 +11 +10241.00390625 +21 +6447.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10241.00390625 +20 +6447.99609375 +30 +0.0 +11 +10241.00390625 +21 +6468.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10241.00390625 +20 +6468.0 +30 +0.0 +11 +10394.5078125 +21 +6480.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10394.5078125 +20 +6480.99609375 +30 +0.0 +11 +9812.00390625 +21 +6480.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10394.5078125 +20 +6480.99609375 +30 +0.0 +11 +10394.5078125 +21 +6529.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10394.5078125 +20 +6529.998046875 +30 +0.0 +11 +10424.00390625 +21 +6529.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10424.00390625 +20 +6529.998046875 +30 +0.0 +11 +10442.00390625 +21 +6552.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10442.00390625 +20 +6552.0 +30 +0.0 +11 +10442.00390625 +21 +6571.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10442.00390625 +20 +6571.998046875 +30 +0.0 +11 +10433.00390625 +21 +6579.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10433.00390625 +20 +6579.99609375 +30 +0.0 +11 +10394.5078125 +21 +6579.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10394.5078125 +20 +6579.99609375 +30 +0.0 +11 +10394.5078125 +21 +6868.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10394.5078125 +20 +6868.998046875 +30 +0.0 +11 +11008.0078125 +21 +6868.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11008.0078125 +20 +6868.998046875 +30 +0.0 +11 +11008.0078125 +21 +7122.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10105.20703125 +20 +5872.998046875 +30 +0.0 +11 +10152.01171875 +21 +5830.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10152.01171875 +20 +5830.998046875 +30 +0.0 +11 +10152.01171875 +21 +5779.6875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10152.01171875 +20 +5779.6875 +30 +0.0 +11 +10114.0078125 +21 +5756.373046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10114.0078125 +20 +5756.373046875 +30 +0.0 +11 +10124.015625 +21 +5734.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10124.015625 +20 +5734.998046875 +30 +0.0 +11 +10138.01953125 +21 +5718.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10138.01953125 +20 +5718.0 +30 +0.0 +11 +10152.01171875 +21 +5688.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10152.01171875 +20 +5688.0 +30 +0.0 +11 +10188.01171875 +21 +5704.248046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10188.01171875 +20 +5704.248046875 +30 +0.0 +11 +10241.00390625 +21 +5652.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10241.00390625 +20 +5652.99609375 +30 +0.0 +11 +10322.00390625 +21 +5560.3359375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10322.00390625 +20 +5560.3359375 +30 +0.0 +11 +10362.01171875 +21 +5600.3671875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10362.01171875 +20 +5600.3671875 +30 +0.0 +11 +10374.01171875 +21 +5574.52734375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10374.01171875 +20 +5574.52734375 +30 +0.0 +11 +10442.00390625 +21 +5571.193359375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10442.00390625 +20 +5571.193359375 +30 +0.0 +11 +10465.0078125 +21 +5574.52734375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10465.0078125 +20 +5574.52734375 +30 +0.0 +11 +10488.01171875 +21 +5548.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10500.50390625 +20 +5540.501953125 +30 +0.0 +11 +10510.7578125 +21 +5538.626953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10510.7578125 +20 +5538.626953125 +30 +0.0 +11 +10517.00390625 +21 +5529.251953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10517.00390625 +20 +5529.251953125 +30 +0.0 +11 +10578.01171875 +21 +5525.501953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10578.01171875 +20 +5525.501953125 +30 +0.0 +11 +10596.01171875 +21 +5502.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10596.01171875 +20 +5502.0 +30 +0.0 +11 +10578.01171875 +21 +5475.439453125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10578.01171875 +20 +5475.439453125 +30 +0.0 +11 +10527.2578125 +21 +5475.439453125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10527.2578125 +20 +5475.439453125 +30 +0.0 +11 +10527.2578125 +21 +5430.62109375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10527.2578125 +20 +5430.62109375 +30 +0.0 +11 +10517.00390625 +21 +5411.701171875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10517.00390625 +20 +5411.701171875 +30 +0.0 +11 +10424.00390625 +21 +5421.1640625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10424.00390625 +20 +5421.1640625 +30 +0.0 +11 +10406.00390625 +21 +5372.044921875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10406.00390625 +20 +5372.044921875 +30 +0.0 +11 +10415.00390625 +21 +5343.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10415.00390625 +20 +5343.498046875 +30 +0.0 +11 +10362.01171875 +21 +5343.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10362.01171875 +20 +5343.498046875 +30 +0.0 +11 +10298.00390625 +21 +5343.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10298.00390625 +20 +5343.498046875 +30 +0.0 +11 +10298.00390625 +21 +5332.248046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10298.00390625 +20 +5332.248046875 +30 +0.0 +11 +10322.00390625 +21 +5320.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10322.00390625 +20 +5320.998046875 +30 +0.0 +11 +10342.0078125 +21 +5271.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10342.0078125 +20 +5271.99609375 +30 +0.0 +11 +10322.00390625 +21 +5253.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10322.00390625 +20 +5253.99609375 +30 +0.0 +11 +10322.00390625 +21 +5223.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10322.00390625 +20 +5223.99609375 +30 +0.0 +11 +10252.0078125 +21 +5193.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10252.0078125 +20 +5193.0 +30 +0.0 +11 +10241.00390625 +21 +5179.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10241.00390625 +20 +5179.998046875 +30 +0.0 +11 +10196.015625 +21 +5179.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10196.015625 +20 +5179.998046875 +30 +0.0 +11 +10170.01171875 +21 +5160.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10170.01171875 +20 +5160.99609375 +30 +0.0 +11 +10138.01953125 +21 +5154.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10138.01953125 +20 +5154.0 +30 +0.0 +11 +10124.015625 +21 +5160.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10124.015625 +20 +5160.99609375 +30 +0.0 +11 +10068.01171875 +21 +5145.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10068.01171875 +20 +5145.99609375 +30 +0.0 +11 +10054.0078125 +21 +5111.748046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10054.0078125 +20 +5111.748046875 +30 +0.0 +11 +10068.01171875 +21 +5091.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10068.01171875 +20 +5091.0 +30 +0.0 +11 +10105.20703125 +21 +5073.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10105.20703125 +20 +5073.99609375 +30 +0.0 +11 +10114.0078125 +21 +5029.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10114.0078125 +20 +5029.998046875 +30 +0.0 +11 +10152.01171875 +21 +5005.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10152.01171875 +20 +5005.998046875 +30 +0.0 +11 +10154.015625 +21 +4977.75 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10154.015625 +20 +4977.75 +30 +0.0 +11 +10188.01171875 +21 +4968.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10188.01171875 +20 +4968.0 +30 +0.0 +11 +10218.50390625 +21 +4958.00390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10218.50390625 +20 +4958.00390625 +30 +0.0 +11 +10188.01171875 +21 +4927.25390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10188.01171875 +20 +4927.25390625 +30 +0.0 +11 +10124.015625 +21 +4927.25390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10124.015625 +20 +4927.25390625 +30 +0.0 +11 +10068.01171875 +21 +4929.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10068.01171875 +20 +4929.99609375 +30 +0.0 +11 +10078.0078125 +21 +4870.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10078.0078125 +20 +4870.001953125 +30 +0.0 +11 +10105.01953125 +21 +4842.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10105.01953125 +20 +4842.0 +30 +0.0 +11 +10133.00390625 +21 +4836.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10133.00390625 +20 +4836.99609375 +30 +0.0 +11 +10131.01171875 +21 +4810.74609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10131.01171875 +20 +4810.74609375 +30 +0.0 +11 +10096.01953125 +21 +4823.87109375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10096.01953125 +20 +4823.87109375 +30 +0.0 +11 +10096.01953125 +21 +4794.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10096.01953125 +20 +4794.99609375 +30 +0.0 +11 +10061.00390625 +21 +4723.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10061.00390625 +20 +4723.998046875 +30 +0.0 +11 +9982.0078125 +21 +4666.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9982.0078125 +20 +4666.001953125 +30 +0.0 +11 +9951.50390625 +21 +4651.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9951.50390625 +20 +4651.998046875 +30 +0.0 +11 +9928.25390625 +21 +4659.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9928.25390625 +20 +4659.0 +30 +0.0 +11 +9893.1328125 +21 +4635.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9893.1328125 +20 +4635.0 +30 +0.0 +11 +9893.1328125 +21 +4608.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9893.1328125 +20 +4608.498046875 +30 +0.0 +11 +9924.01171875 +21 +4607.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9924.01171875 +20 +4607.49609375 +30 +0.0 +11 +9924.01171875 +21 +4575.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9924.01171875 +20 +4575.498046875 +30 +0.0 +11 +9943.0078125 +21 +4575.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9943.0078125 +20 +4575.498046875 +30 +0.0 +11 +9960.01171875 +21 +4530.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9960.01171875 +20 +4530.99609375 +30 +0.0 +11 +9924.01171875 +21 +4518.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9924.01171875 +20 +4518.0 +30 +0.0 +11 +9910.0078125 +21 +4509.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9910.0078125 +20 +4509.99609375 +30 +0.0 +11 +9865.0078125 +21 +4518.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9865.0078125 +20 +4518.0 +30 +0.0 +11 +9854.00390625 +21 +4491.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9854.00390625 +20 +4491.0 +30 +0.0 +11 +9886.0078125 +21 +4464.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9886.0078125 +20 +4464.0 +30 +0.0 +11 +9859.51171875 +21 +4429.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9859.51171875 +20 +4429.998046875 +30 +0.0 +11 +9924.01171875 +21 +4368.50390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9924.01171875 +20 +4368.50390625 +30 +0.0 +11 +9979.25390625 +21 +4368.50390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9979.25390625 +20 +4368.50390625 +30 +0.0 +11 +10000.0078125 +21 +4404.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10000.0078125 +20 +4404.0 +30 +0.0 +11 +10021.51171875 +21 +4416.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10021.51171875 +20 +4416.99609375 +30 +0.0 +11 +10021.51171875 +21 +4368.50390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10021.51171875 +20 +4368.50390625 +30 +0.0 +11 +10021.51171875 +21 +4345.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10021.51171875 +20 +4345.998046875 +30 +0.0 +11 +10044.01171875 +21 +4194.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10044.01171875 +20 +4194.0 +30 +0.0 +11 +10096.01953125 +21 +4093.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10096.01953125 +20 +4093.998046875 +30 +0.0 +11 +10109.61328125 +21 +4050.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10109.61328125 +20 +4050.0 +30 +0.0 +11 +10156.01953125 +21 +3973.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10156.01953125 +20 +3973.998046875 +30 +0.0 +11 +10171.01953125 +21 +3909.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10171.01953125 +20 +3909.99609375 +30 +0.0 +11 +10203.2578125 +21 +3877.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10203.2578125 +20 +3877.998046875 +30 +0.0 +11 +10241.00390625 +21 +3877.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10241.00390625 +20 +3877.998046875 +30 +0.0 +11 +10246.51171875 +21 +3909.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10246.51171875 +20 +3909.99609375 +30 +0.0 +11 +10272.01171875 +21 +3925.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10272.01171875 +20 +3925.998046875 +30 +0.0 +11 +10310.00390625 +21 +3909.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10310.00390625 +20 +3909.99609375 +30 +0.0 +11 +10291.0078125 +21 +3877.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10291.0078125 +20 +3877.998046875 +30 +0.0 +11 +10300.51171875 +21 +3819.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10300.51171875 +20 +3819.99609375 +30 +0.0 +11 +10310.00390625 +21 +3799.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10310.00390625 +20 +3799.998046875 +30 +0.0 +11 +10356.01171875 +21 +3799.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10356.01171875 +20 +3799.998046875 +30 +0.0 +11 +10384.0078125 +21 +3828.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10384.0078125 +20 +3828.0 +30 +0.0 +11 +10384.0078125 +21 +3849.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10384.0078125 +20 +3849.0 +30 +0.0 +11 +10356.01171875 +21 +3918.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10356.01171875 +20 +3918.0 +30 +0.0 +11 +10300.51171875 +21 +3973.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10300.51171875 +20 +3973.998046875 +30 +0.0 +11 +10300.51171875 +21 +4023.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10300.51171875 +20 +4023.99609375 +30 +0.0 +11 +10328.26171875 +21 +4071.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10328.26171875 +20 +4071.99609375 +30 +0.0 +11 +10314.38671875 +21 +4123.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10314.38671875 +20 +4123.998046875 +30 +0.0 +11 +10310.00390625 +21 +4158.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10310.00390625 +20 +4158.0 +30 +0.0 +11 +10321.32421875 +21 +4183.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10321.32421875 +20 +4183.998046875 +30 +0.0 +11 +10370.00390625 +21 +4183.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10370.00390625 +20 +4183.998046875 +30 +0.0 +11 +10370.00390625 +21 +4194.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10370.00390625 +20 +4194.0 +30 +0.0 +11 +10406.00390625 +21 +4210.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10406.00390625 +20 +4210.001953125 +30 +0.0 +11 +10490.00390625 +21 +4285.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10490.00390625 +20 +4285.998046875 +30 +0.0 +11 +10514.00390625 +21 +4333.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10514.00390625 +20 +4333.001953125 +30 +0.0 +11 +10592.00390625 +21 +4368.50390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10592.00390625 +20 +4368.50390625 +30 +0.0 +11 +10592.00390625 +21 +4399.25390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10592.00390625 +20 +4399.25390625 +30 +0.0 +11 +10626.01171875 +21 +4416.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10626.01171875 +20 +4416.99609375 +30 +0.0 +11 +10668.01171875 +21 +4410.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10668.01171875 +20 +4410.498046875 +30 +0.0 +11 +10660.0078125 +21 +4471.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10660.0078125 +20 +4471.998046875 +30 +0.0 +11 +10647.01171875 +21 +4518.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10647.01171875 +20 +4518.0 +30 +0.0 +11 +10636.0078125 +21 +4542.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10636.0078125 +20 +4542.0 +30 +0.0 +11 +10653.50390625 +21 +4558.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10653.50390625 +20 +4558.998046875 +30 +0.0 +11 +10636.0078125 +21 +4575.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10636.0078125 +20 +4575.498046875 +30 +0.0 +11 +10636.0078125 +21 +4599.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10636.0078125 +20 +4599.0 +30 +0.0 +11 +10580.00390625 +21 +4608.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10580.00390625 +20 +4608.498046875 +30 +0.0 +11 +10490.00390625 +21 +4626.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10490.00390625 +20 +4626.498046875 +30 +0.0 +11 +10490.00390625 +21 +4635.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10490.00390625 +20 +4635.0 +30 +0.0 +11 +10438.0078125 +21 +4647.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10438.0078125 +20 +4647.0 +30 +0.0 +11 +10315.6640625 +21 +4695.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10315.6640625 +20 +4695.0 +30 +0.0 +11 +10315.6640625 +21 +4723.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10315.6640625 +20 +4723.998046875 +30 +0.0 +11 +10322.00390625 +21 +4737.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10322.00390625 +20 +4737.99609375 +30 +0.0 +11 +10356.01171875 +21 +4744.5 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10356.01171875 +20 +4744.5 +30 +0.0 +11 +10272.01171875 +21 +4794.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10272.01171875 +20 +4794.99609375 +30 +0.0 +11 +10246.51171875 +21 +4842.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10246.51171875 +20 +4842.0 +30 +0.0 +11 +10287.01171875 +21 +4842.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10287.01171875 +20 +4842.0 +30 +0.0 +11 +10291.0078125 +21 +4860.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10291.0078125 +20 +4860.99609375 +30 +0.0 +11 +10272.01171875 +21 +4879.5 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10272.01171875 +20 +4879.5 +30 +0.0 +11 +10272.01171875 +21 +4914.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10272.01171875 +20 +4914.498046875 +30 +0.0 +11 +10287.01171875 +21 +4906.74609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10287.01171875 +20 +4906.74609375 +30 +0.0 +11 +10295.75390625 +21 +4927.25390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10295.75390625 +20 +4927.25390625 +30 +0.0 +11 +10315.6640625 +21 +4929.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10315.6640625 +20 +4929.99609375 +30 +0.0 +11 +10318.83984375 +21 +4960.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10318.83984375 +20 +4960.001953125 +30 +0.0 +11 +10281.50390625 +21 +4987.5 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10281.50390625 +20 +4987.5 +30 +0.0 +11 +10252.0078125 +21 +4977.75 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10252.0078125 +20 +4977.75 +30 +0.0 +11 +10218.50390625 +21 +4958.00390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10356.01171875 +20 +4744.5 +30 +0.0 +11 +10388.00390625 +21 +4763.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10388.00390625 +20 +4763.49609375 +30 +0.0 +11 +10438.0078125 +21 +4731.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10438.0078125 +20 +4731.0 +30 +0.0 +11 +10464.01171875 +21 +4709.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10464.01171875 +20 +4709.49609375 +30 +0.0 +11 +10535.00390625 +21 +4680.50390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10535.00390625 +20 +4680.50390625 +30 +0.0 +11 +10608.01171875 +21 +4659.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10608.01171875 +20 +4659.0 +30 +0.0 +11 +10626.01171875 +21 +4666.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10626.01171875 +20 +4666.001953125 +30 +0.0 +11 +10636.0078125 +21 +4599.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10626.01171875 +20 +4666.001953125 +30 +0.0 +11 +10690.0078125 +21 +4666.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10690.0078125 +20 +4666.001953125 +30 +0.0 +11 +10714.0078125 +21 +4680.50390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10714.0078125 +20 +4680.50390625 +30 +0.0 +11 +10774.0078125 +21 +4669.751953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10774.0078125 +20 +4669.751953125 +30 +0.0 +11 +10804.0078125 +21 +4659.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10804.0078125 +20 +4659.0 +30 +0.0 +11 +10864.0078125 +21 +4695.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10864.0078125 +20 +4695.0 +30 +0.0 +11 +10886.00390625 +21 +4719.75 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10886.00390625 +20 +4719.75 +30 +0.0 +11 +10924.0078125 +21 +4709.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10924.0078125 +20 +4709.49609375 +30 +0.0 +11 +10944.01171875 +21 +4723.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10944.01171875 +20 +4723.998046875 +30 +0.0 +11 +10964.00390625 +21 +4695.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10964.00390625 +20 +4695.0 +30 +0.0 +11 +10954.0078125 +21 +4680.50390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10954.0078125 +20 +4680.50390625 +30 +0.0 +11 +11020.0078125 +21 +4680.50390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11020.0078125 +20 +4680.50390625 +30 +0.0 +11 +10987.0078125 +21 +4659.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10987.0078125 +20 +4659.0 +30 +0.0 +11 +10987.0078125 +21 +4635.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10987.0078125 +20 +4635.0 +30 +0.0 +11 +10934.00390625 +21 +4635.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10934.00390625 +20 +4635.0 +30 +0.0 +11 +10905.01171875 +21 +4603.74609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10905.01171875 +20 +4603.74609375 +30 +0.0 +11 +10905.01171875 +21 +4575.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10905.01171875 +20 +4575.498046875 +30 +0.0 +11 +10886.00390625 +21 +4550.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10886.00390625 +20 +4550.49609375 +30 +0.0 +11 +10886.00390625 +21 +4518.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10886.00390625 +20 +4518.0 +30 +0.0 +11 +10875.01171875 +21 +4504.5 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10875.01171875 +20 +4504.5 +30 +0.0 +11 +10846.0078125 +21 +4509.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10846.0078125 +20 +4509.99609375 +30 +0.0 +11 +10846.0078125 +21 +4471.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10846.0078125 +20 +4471.998046875 +30 +0.0 +11 +10834.0078125 +21 +4429.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10834.0078125 +20 +4429.998046875 +30 +0.0 +11 +10804.0078125 +21 +4429.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10804.0078125 +20 +4429.998046875 +30 +0.0 +11 +10804.0078125 +21 +4491.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10804.0078125 +20 +4491.0 +30 +0.0 +11 +10789.0078125 +21 +4491.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10789.0078125 +20 +4491.0 +30 +0.0 +11 +10774.0078125 +21 +4464.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10774.0078125 +20 +4464.0 +30 +0.0 +11 +10744.0078125 +21 +4491.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10744.0078125 +20 +4491.0 +30 +0.0 +11 +10759.0078125 +21 +4524.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10759.0078125 +20 +4524.498046875 +30 +0.0 +11 +10834.0078125 +21 +4530.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10834.0078125 +20 +4530.0 +30 +0.0 +11 +10804.0078125 +21 +4563.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10804.0078125 +20 +4563.0 +30 +0.0 +11 +10702.0078125 +21 +4563.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10702.0078125 +20 +4563.0 +30 +0.0 +11 +10702.0078125 +21 +4591.5 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10702.0078125 +20 +4591.5 +30 +0.0 +11 +10636.0078125 +21 +4599.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10804.0078125 +20 +4429.998046875 +30 +0.0 +11 +10804.0078125 +21 +4383.87890625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10804.0078125 +20 +4383.87890625 +30 +0.0 +11 +10796.5078125 +21 +4368.50390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10796.5078125 +20 +4368.50390625 +30 +0.0 +11 +10716.01171875 +21 +4285.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10716.01171875 +20 +4285.998046875 +30 +0.0 +11 +10716.01171875 +21 +4158.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10716.01171875 +20 +3799.998046875 +30 +0.0 +11 +10819.0078125 +21 +3799.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10895.5078125 +20 +3799.998046875 +30 +0.0 +11 +10895.5078125 +21 +4158.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10895.5078125 +20 +4158.0 +30 +0.0 +11 +10716.01171875 +21 +4158.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10996.0078125 +20 +3537.99609375 +30 +0.0 +11 +10819.0078125 +21 +3799.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11596.0078125 +20 +6615.99609375 +30 +0.0 +11 +11596.0078125 +21 +7122.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11596.0078125 +20 +6615.99609375 +30 +0.0 +11 +11664.01171875 +21 +6579.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11664.01171875 +20 +6579.99609375 +30 +0.0 +11 +11664.01171875 +21 +6529.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11664.01171875 +20 +6529.998046875 +30 +0.0 +11 +11556.01171875 +21 +6505.5 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11556.01171875 +20 +6505.5 +30 +0.0 +11 +11556.01171875 +21 +6480.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11556.01171875 +20 +6480.99609375 +30 +0.0 +11 +11524.0078125 +21 +6468.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11524.0078125 +20 +6468.0 +30 +0.0 +11 +11524.0078125 +21 +6436.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11524.0078125 +20 +6436.998046875 +30 +0.0 +11 +11572.0078125 +21 +6417.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11572.0078125 +20 +6417.0 +30 +0.0 +11 +11580.01171875 +21 +6390.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11580.01171875 +20 +6390.0 +30 +0.0 +11 +11610.01171875 +21 +6378.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11610.01171875 +20 +6378.0 +30 +0.0 +11 +11556.01171875 +21 +6361.13671875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11556.01171875 +20 +6361.13671875 +30 +0.0 +11 +11502.01171875 +21 +6357.6328125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11502.01171875 +20 +6357.6328125 +30 +0.0 +11 +11474.00390625 +21 +6333.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11474.00390625 +20 +6333.99609375 +30 +0.0 +11 +11474.00390625 +21 +6324.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11474.00390625 +20 +6324.0 +30 +0.0 +11 +11404.0078125 +21 +6313.623046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11404.0078125 +20 +6313.623046875 +30 +0.0 +11 +11342.00390625 +21 +6306.62109375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11342.00390625 +20 +6306.62109375 +30 +0.0 +11 +11342.00390625 +21 +6292.875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11342.00390625 +20 +6292.875 +30 +0.0 +11 +11373.01171875 +21 +6291.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11373.01171875 +20 +6291.0 +30 +0.0 +11 +11373.01171875 +21 +6229.623046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11373.01171875 +20 +6229.623046875 +30 +0.0 +11 +11330.00390625 +21 +6216.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11330.00390625 +20 +6216.99609375 +30 +0.0 +11 +11373.01171875 +21 +6150.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11373.01171875 +20 +6150.498046875 +30 +0.0 +11 +11330.00390625 +21 +6114.75 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11330.00390625 +20 +6114.75 +30 +0.0 +11 +11439.01171875 +21 +6101.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11439.01171875 +20 +6101.49609375 +30 +0.0 +11 +11373.01171875 +21 +6084.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11373.01171875 +20 +6084.99609375 +30 +0.0 +11 +11351.5078125 +21 +6057.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11351.5078125 +20 +6057.99609375 +30 +0.0 +11 +11362.25390625 +21 +6033.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11362.25390625 +20 +6033.0 +30 +0.0 +11 +11342.00390625 +21 +5997.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11342.00390625 +20 +5997.99609375 +30 +0.0 +11 +11284.0078125 +21 +5982.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11284.0078125 +20 +5982.0 +30 +0.0 +11 +11284.0078125 +21 +5952.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11284.0078125 +20 +5952.498046875 +30 +0.0 +11 +11330.00390625 +21 +5941.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11330.00390625 +20 +5941.998046875 +30 +0.0 +11 +11330.00390625 +21 +5931.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11330.00390625 +20 +5931.99609375 +30 +0.0 +11 +11294.00390625 +21 +5920.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11294.00390625 +20 +5920.998046875 +30 +0.0 +11 +11313.01171875 +21 +5903.25 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11313.01171875 +20 +5903.25 +30 +0.0 +11 +11284.0078125 +21 +5872.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11284.0078125 +20 +5872.998046875 +30 +0.0 +11 +11214.01171875 +21 +5916.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11214.01171875 +20 +5916.0 +30 +0.0 +11 +11190.01171875 +21 +5903.25 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11190.01171875 +20 +5903.25 +30 +0.0 +11 +11190.01171875 +21 +5885.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11190.01171875 +20 +5885.49609375 +30 +0.0 +11 +11150.00390625 +21 +5864.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11150.00390625 +20 +5864.49609375 +30 +0.0 +11 +11134.0078125 +21 +5830.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11134.0078125 +20 +5830.998046875 +30 +0.0 +11 +11098.0078125 +21 +5864.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11098.0078125 +20 +5864.49609375 +30 +0.0 +11 +11070.01171875 +21 +5851.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11070.01171875 +20 +5851.998046875 +30 +0.0 +11 +11020.0078125 +21 +5851.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11020.0078125 +20 +5851.998046875 +30 +0.0 +11 +11003.5078125 +21 +5819.68359375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11003.5078125 +20 +5819.68359375 +30 +0.0 +11 +11011.7578125 +21 +5797.125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11011.7578125 +20 +5797.125 +30 +0.0 +11 +10974.01171875 +21 +5779.6875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10974.01171875 +20 +5779.6875 +30 +0.0 +11 +10974.01171875 +21 +5718.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10974.01171875 +20 +5718.0 +30 +0.0 +11 +10934.00390625 +21 +5710.37109375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10934.00390625 +20 +5710.37109375 +30 +0.0 +11 +10974.01171875 +21 +5688.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10974.01171875 +20 +5688.0 +30 +0.0 +11 +11003.5078125 +21 +5688.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11003.5078125 +20 +5688.0 +30 +0.0 +11 +11045.00390625 +21 +5661.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11045.00390625 +20 +5661.498046875 +30 +0.0 +11 +11084.00390625 +21 +5661.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11084.00390625 +20 +5661.498046875 +30 +0.0 +11 +11045.00390625 +21 +5628.33984375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11045.00390625 +20 +5628.33984375 +30 +0.0 +11 +11056.0078125 +21 +5618.68359375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11056.0078125 +20 +5618.68359375 +30 +0.0 +11 +11020.0078125 +21 +5587.447265625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11020.0078125 +20 +5587.447265625 +30 +0.0 +11 +11020.0078125 +21 +5571.193359375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11020.0078125 +20 +5571.193359375 +30 +0.0 +11 +11024.26171875 +21 +5560.3359375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11024.26171875 +20 +5560.3359375 +30 +0.0 +11 +11038.0078125 +21 +5539.564453125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11038.0078125 +20 +5539.564453125 +30 +0.0 +11 +10992.87890625 +21 +5525.501953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10992.87890625 +20 +5525.501953125 +30 +0.0 +11 +10886.00390625 +21 +5540.501953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10886.00390625 +20 +5540.501953125 +30 +0.0 +11 +10875.01171875 +21 +5561.26171875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10875.01171875 +20 +5561.26171875 +30 +0.0 +11 +10789.0078125 +21 +5574.52734375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10789.0078125 +20 +5574.52734375 +30 +0.0 +11 +10690.0078125 +21 +5533.939453125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10690.0078125 +20 +5533.939453125 +30 +0.0 +11 +10680.01171875 +21 +5525.501953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10680.01171875 +20 +5525.501953125 +30 +0.0 +11 +10644.01171875 +21 +5525.501953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10644.01171875 +20 +5525.501953125 +30 +0.0 +11 +10631.00390625 +21 +5502.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10631.00390625 +20 +5502.0 +30 +0.0 +11 +10596.01171875 +21 +5502.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11439.01171875 +20 +6101.49609375 +30 +0.0 +11 +11439.01171875 +21 +6078.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11439.01171875 +20 +6078.0 +30 +0.0 +11 +11476.0078125 +21 +6070.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11476.0078125 +20 +6070.998046875 +30 +0.0 +11 +11476.0078125 +21 +6033.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11476.0078125 +20 +6033.0 +30 +0.0 +11 +11496.01171875 +21 +6032.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11496.01171875 +20 +6032.49609375 +30 +0.0 +11 +11496.01171875 +21 +6015.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11496.01171875 +20 +6015.498046875 +30 +0.0 +11 +11486.00390625 +21 +6009.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11486.00390625 +20 +6009.0 +30 +0.0 +11 +11524.0078125 +21 +5979.123046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11524.0078125 +20 +5979.123046875 +30 +0.0 +11 +11476.0078125 +21 +5909.625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11476.0078125 +20 +5909.625 +30 +0.0 +11 +11505.01171875 +21 +5894.373046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11505.01171875 +20 +5894.373046875 +30 +0.0 +11 +11590.0078125 +21 +5920.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11590.0078125 +20 +5920.998046875 +30 +0.0 +11 +11604.01171875 +21 +5901.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11604.01171875 +20 +5901.99609375 +30 +0.0 +11 +11642.00390625 +21 +5907.685546875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11642.00390625 +20 +5907.685546875 +30 +0.0 +11 +11656.0078125 +21 +5931.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11656.0078125 +20 +5931.99609375 +30 +0.0 +11 +11734.0078125 +21 +5960.25 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11734.0078125 +20 +5960.25 +30 +0.0 +11 +11784.01171875 +21 +5944.37109375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11784.01171875 +20 +5944.37109375 +30 +0.0 +11 +11784.01171875 +21 +5926.5 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11784.01171875 +20 +5926.5 +30 +0.0 +11 +11848.0078125 +21 +5919.84375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11848.0078125 +20 +5919.84375 +30 +0.0 +11 +11862.01171875 +21 +5858.25 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11862.01171875 +20 +5858.25 +30 +0.0 +11 +11816.00390625 +21 +5872.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11816.00390625 +20 +5872.998046875 +30 +0.0 +11 +11794.0078125 +21 +5865.62109375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11794.0078125 +20 +5865.62109375 +30 +0.0 +11 +11776.0078125 +21 +5835.84375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11776.0078125 +20 +5835.84375 +30 +0.0 +11 +11805.01171875 +21 +5819.68359375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11805.01171875 +20 +5819.68359375 +30 +0.0 +11 +11794.0078125 +21 +5808.404296875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11794.0078125 +20 +5808.404296875 +30 +0.0 +11 +11714.00390625 +21 +5814.046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11714.00390625 +20 +5814.046875 +30 +0.0 +11 +11734.0078125 +21 +5748.84375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11734.0078125 +20 +5748.84375 +30 +0.0 +11 +11759.00390625 +21 +5737.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11759.00390625 +20 +5737.998046875 +30 +0.0 +11 +11776.0078125 +21 +5714.185546875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11776.0078125 +20 +5714.185546875 +30 +0.0 +11 +11714.00390625 +21 +5710.37109375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11714.00390625 +20 +5710.37109375 +30 +0.0 +11 +11649.01171875 +21 +5688.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11649.01171875 +20 +5688.0 +30 +0.0 +11 +11656.0078125 +21 +5661.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11656.0078125 +20 +5661.498046875 +30 +0.0 +11 +11656.0078125 +21 +5644.921875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11656.0078125 +20 +5644.921875 +30 +0.0 +11 +11580.01171875 +21 +5628.33984375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11580.01171875 +20 +5628.33984375 +30 +0.0 +11 +11524.0078125 +21 +5603.0625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11524.0078125 +20 +5603.0625 +30 +0.0 +11 +11439.01171875 +21 +5603.0625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11439.01171875 +20 +5603.0625 +30 +0.0 +11 +11424.01171875 +21 +5565.76171875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11424.01171875 +20 +5565.76171875 +30 +0.0 +11 +11439.01171875 +21 +5554.23046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11439.01171875 +20 +5554.23046875 +30 +0.0 +11 +11394.01171875 +21 +5539.564453125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11394.01171875 +20 +5539.564453125 +30 +0.0 +11 +11457.50390625 +21 +5502.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11457.50390625 +20 +5502.0 +30 +0.0 +11 +11547.50390625 +21 +5513.75390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11547.50390625 +20 +5513.75390625 +30 +0.0 +11 +11618.00390625 +21 +5520.78515625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11618.00390625 +20 +5520.78515625 +30 +0.0 +11 +11656.0078125 +21 +5548.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11656.0078125 +20 +5548.001953125 +30 +0.0 +11 +11695.0078125 +21 +5549.953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11695.0078125 +20 +5549.953125 +30 +0.0 +11 +11745.01171875 +21 +5527.376953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11745.01171875 +20 +5527.376953125 +30 +0.0 +11 +11776.0078125 +21 +5534.390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11776.0078125 +20 +5534.390625 +30 +0.0 +11 +11799.50390625 +21 +5527.376953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11799.50390625 +20 +5527.376953125 +30 +0.0 +11 +11862.01171875 +21 +5540.501953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11862.01171875 +20 +5540.501953125 +30 +0.0 +11 +11862.01171875 +21 +5561.26171875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11862.01171875 +20 +5561.26171875 +30 +0.0 +11 +11916.01171875 +21 +5615.701171875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11916.01171875 +20 +5615.701171875 +30 +0.0 +11 +11916.01171875 +21 +5644.921875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11916.01171875 +20 +5644.921875 +30 +0.0 +11 +11898.01171875 +21 +5653.20703125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11898.01171875 +20 +5653.20703125 +30 +0.0 +11 +11956.0078125 +21 +5674.74609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11956.0078125 +20 +5674.74609375 +30 +0.0 +11 +12052.0078125 +21 +5688.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12052.0078125 +20 +5688.0 +30 +0.0 +11 +12148.0078125 +21 +5649.064453125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12148.0078125 +20 +5649.064453125 +30 +0.0 +11 +12202.0078125 +21 +5525.501953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12202.0078125 +20 +5525.501953125 +30 +0.0 +11 +12260.00390625 +21 +5513.75390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12260.00390625 +20 +5513.75390625 +30 +0.0 +11 +12316.0078125 +21 +5488.72265625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12316.0078125 +20 +5488.72265625 +30 +0.0 +11 +12328.0078125 +21 +5453.02734375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12328.0078125 +20 +5453.02734375 +30 +0.0 +11 +12390.01171875 +21 +5453.02734375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12390.01171875 +20 +5453.02734375 +30 +0.0 +11 +12404.00390625 +21 +5453.02734375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12404.00390625 +20 +5453.02734375 +30 +0.0 +11 +12454.0078125 +21 +5475.439453125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12454.0078125 +20 +5475.439453125 +30 +0.0 +11 +12474.01171875 +21 +5475.439453125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12474.01171875 +20 +5475.439453125 +30 +0.0 +11 +12474.01171875 +21 +5440.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12474.01171875 +20 +5440.001953125 +30 +0.0 +11 +12464.00390625 +21 +5440.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12464.00390625 +20 +5440.001953125 +30 +0.0 +11 +12429.01171875 +21 +5357.771484375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12429.01171875 +20 +5357.771484375 +30 +0.0 +11 +12420.01171875 +21 +5343.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12420.01171875 +20 +5343.498046875 +30 +0.0 +11 +12359.00390625 +21 +5350.634765625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12359.00390625 +20 +5350.634765625 +30 +0.0 +11 +12328.0078125 +21 +5332.248046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12328.0078125 +20 +5332.248046875 +30 +0.0 +11 +12343.51171875 +21 +5271.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12343.51171875 +20 +5271.99609375 +30 +0.0 +11 +12322.0078125 +21 +5238.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12322.0078125 +20 +5238.99609375 +30 +0.0 +11 +12288.01171875 +21 +5255.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12288.01171875 +20 +5255.49609375 +30 +0.0 +11 +12260.00390625 +21 +5223.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12260.00390625 +20 +5223.99609375 +30 +0.0 +11 +12212.00390625 +21 +5208.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12212.00390625 +20 +5208.498046875 +30 +0.0 +11 +12212.00390625 +21 +5193.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12212.00390625 +20 +5193.0 +30 +0.0 +11 +12188.00390625 +21 +5193.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12188.00390625 +20 +5193.0 +30 +0.0 +11 +12164.00390625 +21 +5208.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12164.00390625 +20 +5208.498046875 +30 +0.0 +11 +12148.0078125 +21 +5184.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12148.0078125 +20 +5184.0 +30 +0.0 +11 +12076.0078125 +21 +5152.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12076.0078125 +20 +5152.001953125 +30 +0.0 +11 +12060.01171875 +21 +5130.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12060.01171875 +20 +5130.0 +30 +0.0 +11 +12060.01171875 +21 +4860.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12060.01171875 +20 +4860.99609375 +30 +0.0 +11 +12200.00390625 +21 +4860.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12188.00390625 +20 +7122.0 +30 +0.0 +11 +12188.00390625 +21 +6774.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12188.00390625 +20 +6774.0 +30 +0.0 +11 +11597.00390625 +21 +6640.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12786.01171875 +20 +7122.0 +30 +0.0 +11 +12786.01171875 +21 +6640.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12786.01171875 +20 +6640.001953125 +30 +0.0 +11 +12636.01171875 +21 +6640.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12636.01171875 +20 +6640.001953125 +30 +0.0 +11 +12372.01171875 +21 +6540.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12372.01171875 +20 +6540.0 +30 +0.0 +11 +12372.01171875 +21 +6369.568359375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12372.01171875 +20 +6369.568359375 +30 +0.0 +11 +12414.01171875 +21 +5885.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12414.01171875 +20 +5885.49609375 +30 +0.0 +11 +12359.00390625 +21 +5858.25 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12359.00390625 +20 +5858.25 +30 +0.0 +11 +12372.01171875 +21 +5847.75 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12372.01171875 +20 +5847.75 +30 +0.0 +11 +12343.51171875 +21 +5830.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12343.51171875 +20 +5830.998046875 +30 +0.0 +11 +12365.5078125 +21 +5808.404296875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12365.5078125 +20 +5808.404296875 +30 +0.0 +11 +12335.75390625 +21 +5788.40625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12335.75390625 +20 +5788.40625 +30 +0.0 +11 +12328.0078125 +21 +5761.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12328.0078125 +20 +5761.998046875 +30 +0.0 +11 +12397.0078125 +21 +5761.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12397.0078125 +20 +5761.998046875 +30 +0.0 +11 +12404.00390625 +21 +5748.84375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12404.00390625 +20 +5748.84375 +30 +0.0 +11 +12305.00390625 +21 +5710.37109375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12305.00390625 +20 +5710.37109375 +30 +0.0 +11 +12305.00390625 +21 +5699.185546875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12305.00390625 +20 +5699.185546875 +30 +0.0 +11 +12354.50390625 +21 +5688.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12354.50390625 +20 +5688.0 +30 +0.0 +11 +12354.50390625 +21 +5674.74609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12354.50390625 +20 +5674.74609375 +30 +0.0 +11 +12420.01171875 +21 +5674.74609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12420.01171875 +20 +5674.74609375 +30 +0.0 +11 +12488.015625 +21 +5681.373046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12488.015625 +20 +5681.373046875 +30 +0.0 +11 +12488.015625 +21 +5628.33984375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12488.015625 +20 +5628.33984375 +30 +0.0 +11 +12420.01171875 +21 +5644.921875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12420.01171875 +20 +5644.921875 +30 +0.0 +11 +12420.01171875 +21 +5623.51171875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12420.01171875 +20 +5623.51171875 +30 +0.0 +11 +12372.01171875 +21 +5615.701171875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12372.01171875 +20 +5615.701171875 +30 +0.0 +11 +12316.0078125 +21 +5579.3203125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12316.0078125 +20 +5579.3203125 +30 +0.0 +11 +12322.0078125 +21 +5559.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12322.0078125 +20 +5559.99609375 +30 +0.0 +11 +12350.63671875 +21 +5548.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12350.63671875 +20 +5548.001953125 +30 +0.0 +11 +12354.50390625 +21 +5507.876953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12354.50390625 +20 +5507.876953125 +30 +0.0 +11 +12316.0078125 +21 +5488.72265625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12200.00390625 +20 +4860.99609375 +30 +0.0 +11 +12200.00390625 +21 +4647.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12200.00390625 +20 +4647.0 +30 +0.0 +11 +12008.015625 +21 +4647.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12008.015625 +20 +4647.0 +30 +0.0 +11 +12008.015625 +21 +4491.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12008.015625 +20 +4491.0 +30 +0.0 +11 +12200.00390625 +21 +4491.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12200.00390625 +20 +4491.0 +30 +0.0 +11 +12200.00390625 +21 +3685.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11020.0078125 +20 +4680.50390625 +30 +0.0 +11 +11042.00390625 +21 +4641.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11042.00390625 +20 +4641.0 +30 +0.0 +11 +11058.01171875 +21 +4635.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11058.01171875 +20 +4635.0 +30 +0.0 +11 +11058.01171875 +21 +4587.24609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11058.01171875 +20 +4587.24609375 +30 +0.0 +11 +11003.5078125 +21 +4534.248046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11003.5078125 +20 +4534.248046875 +30 +0.0 +11 +11020.0078125 +21 +4513.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11020.0078125 +20 +4513.998046875 +30 +0.0 +11 +11058.01171875 +21 +4513.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11058.01171875 +20 +4513.998046875 +30 +0.0 +11 +11068.0078125 +21 +4477.5 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11068.0078125 +20 +4477.5 +30 +0.0 +11 +11090.00390625 +21 +4471.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11090.00390625 +20 +4471.998046875 +30 +0.0 +11 +11068.0078125 +21 +4441.248046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11068.0078125 +20 +4441.248046875 +30 +0.0 +11 +11090.00390625 +21 +4429.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11090.00390625 +20 +4429.998046875 +30 +0.0 +11 +11110.0078125 +21 +4410.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11110.0078125 +20 +4410.498046875 +30 +0.0 +11 +11148.01171875 +21 +4410.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11148.01171875 +20 +4410.498046875 +30 +0.0 +11 +11129.00390625 +21 +4383.87890625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11129.00390625 +20 +4383.87890625 +30 +0.0 +11 +11063.00390625 +21 +4345.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11063.00390625 +20 +4345.998046875 +30 +0.0 +11 +11020.0078125 +21 +4333.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11020.0078125 +20 +4333.001953125 +30 +0.0 +11 +11011.7578125 +21 +4285.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11011.7578125 +20 +4285.998046875 +30 +0.0 +11 +11063.00390625 +21 +4194.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11063.00390625 +20 +4194.0 +30 +0.0 +11 +11031.01171875 +21 +4143.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11031.01171875 +20 +4143.99609375 +30 +0.0 +11 +11063.00390625 +21 +4113.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11063.00390625 +20 +4113.99609375 +30 +0.0 +11 +11090.00390625 +21 +4011.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11090.00390625 +20 +4011.99609375 +30 +0.0 +11 +11058.01171875 +21 +3990.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11058.01171875 +20 +3990.0 +30 +0.0 +11 +11058.01171875 +21 +3960.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11058.01171875 +20 +3960.0 +30 +0.0 +11 +11030.75390625 +21 +3942.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11030.75390625 +20 +3942.0 +30 +0.0 +11 +11015.8828125 +21 +3978.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11015.8828125 +20 +3978.99609375 +30 +0.0 +11 +11023.32421875 +21 +4000.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11023.32421875 +20 +4000.998046875 +30 +0.0 +11 +11023.32421875 +21 +4023.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11023.32421875 +20 +4023.99609375 +30 +0.0 +11 +10996.0078125 +21 +4023.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10996.0078125 +20 +4023.99609375 +30 +0.0 +11 +11020.0078125 +21 +4071.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11020.0078125 +20 +4071.99609375 +30 +0.0 +11 +11030.75390625 +21 +4088.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11030.75390625 +20 +4088.49609375 +30 +0.0 +11 +11008.0078125 +21 +4123.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11008.0078125 +20 +4123.998046875 +30 +0.0 +11 +11008.0078125 +21 +4210.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11008.0078125 +20 +4210.001953125 +30 +0.0 +11 +10996.0078125 +21 +4224.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10996.0078125 +20 +4224.0 +30 +0.0 +11 +10924.0078125 +21 +4170.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10924.0078125 +20 +4170.99609375 +30 +0.0 +11 +10860.50390625 +21 +4188.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10860.50390625 +20 +4188.99609375 +30 +0.0 +11 +10886.00390625 +21 +4239.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10886.00390625 +20 +4239.99609375 +30 +0.0 +11 +10873.25390625 +21 +4309.5 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10873.25390625 +20 +4309.5 +30 +0.0 +11 +10848.01171875 +21 +4333.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10848.01171875 +20 +4333.001953125 +30 +0.0 +11 +10804.0078125 +21 +4383.87890625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11148.01171875 +20 +4410.498046875 +30 +0.0 +11 +11176.0078125 +21 +4408.125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11176.0078125 +20 +4408.125 +30 +0.0 +11 +11176.0078125 +21 +4429.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11176.0078125 +20 +4429.998046875 +30 +0.0 +11 +11162.00390625 +21 +4441.248046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11162.00390625 +20 +4441.248046875 +30 +0.0 +11 +11210.00390625 +21 +4471.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11210.00390625 +20 +4471.998046875 +30 +0.0 +11 +11234.00390625 +21 +4456.623046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11234.00390625 +20 +4456.623046875 +30 +0.0 +11 +11298.01171875 +21 +4460.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11298.01171875 +20 +4460.49609375 +30 +0.0 +11 +11314.0078125 +21 +4477.5 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11314.0078125 +20 +4477.5 +30 +0.0 +11 +11360.00390625 +21 +4464.310546875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11360.00390625 +20 +4464.310546875 +30 +0.0 +11 +11374.0078125 +21 +4429.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11374.0078125 +20 +4429.998046875 +30 +0.0 +11 +11396.00390625 +21 +4408.125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11396.00390625 +20 +4408.125 +30 +0.0 +11 +11420.00390625 +21 +4408.125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11420.00390625 +20 +4408.125 +30 +0.0 +11 +11420.00390625 +21 +4274.748046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11420.00390625 +20 +4274.748046875 +30 +0.0 +11 +11508.01171875 +21 +4140.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11508.01171875 +20 +4140.99609375 +30 +0.0 +11 +11604.01171875 +21 +4140.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11604.01171875 +20 +4140.99609375 +30 +0.0 +11 +11604.01171875 +21 +3799.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11604.01171875 +20 +3799.998046875 +30 +0.0 +11 +11186.00390625 +21 +3799.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11186.00390625 +20 +3799.998046875 +30 +0.0 +11 +11186.00390625 +21 +3789.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11186.00390625 +20 +3789.99609375 +30 +0.0 +11 +11148.01171875 +21 +3789.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11148.01171875 +20 +3789.99609375 +30 +0.0 +11 +11138.5078125 +21 +3810.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11138.5078125 +20 +3810.0 +30 +0.0 +11 +11100.01171875 +21 +3819.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11100.01171875 +20 +3819.99609375 +30 +0.0 +11 +11090.00390625 +21 +3799.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11090.00390625 +20 +3799.998046875 +30 +0.0 +11 +11129.00390625 +21 +3745.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11129.00390625 +20 +3745.998046875 +30 +0.0 +11 +11138.5078125 +21 +3696.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11138.5078125 +20 +3696.0 +30 +0.0 +11 +11176.0078125 +21 +3649.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11176.0078125 +20 +3649.998046875 +30 +0.0 +11 +11244.01171875 +21 +3613.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11244.01171875 +20 +3613.998046875 +30 +0.0 +11 +11266.0078125 +21 +3591.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11276.00390625 +20 +3603.0 +30 +0.0 +11 +11306.00390625 +21 +3631.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11306.00390625 +20 +3631.998046875 +30 +0.0 +11 +11306.00390625 +21 +3757.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11306.00390625 +20 +3757.998046875 +30 +0.0 +11 +11474.00390625 +21 +3757.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11474.00390625 +20 +3757.998046875 +30 +0.0 +11 +11474.00390625 +21 +3631.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11474.00390625 +20 +3631.998046875 +30 +0.0 +11 +11454.01171875 +21 +3603.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11454.01171875 +20 +3603.0 +30 +0.0 +11 +11438.00390625 +21 +3573.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11438.00390625 +20 +3573.99609375 +30 +0.0 +11 +11474.00390625 +21 +3513.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11474.00390625 +20 +3513.99609375 +30 +0.0 +11 +11498.00390625 +21 +3513.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11498.00390625 +20 +3513.99609375 +30 +0.0 +11 +11498.00390625 +21 +3439.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11498.00390625 +20 +3439.998046875 +30 +0.0 +11 +11566.0078125 +21 +3439.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11566.0078125 +20 +3439.998046875 +30 +0.0 +11 +11566.0078125 +21 +3417.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11566.0078125 +20 +3417.99609375 +30 +0.0 +11 +11588.015625 +21 +3417.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11588.015625 +20 +3417.99609375 +30 +0.0 +11 +11588.015625 +21 +3354.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11604.01171875 +20 +3354.0 +30 +0.0 +11 +11754.01171875 +21 +3354.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11754.01171875 +20 +3354.0 +30 +0.0 +11 +11754.01171875 +21 +3264.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +11754.01171875 +20 +3264.0 +30 +0.0 +11 +11732.015625 +21 +3264.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12200.00390625 +20 +3685.998046875 +30 +0.0 +11 +12062.00390625 +21 +3513.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12062.00390625 +20 +3513.99609375 +30 +0.0 +11 +12062.00390625 +21 +3439.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12062.00390625 +20 +3439.998046875 +30 +0.0 +11 +12112.0078125 +21 +3439.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12112.0078125 +20 +3439.998046875 +30 +0.0 +11 +12112.0078125 +21 +3264.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12112.0078125 +20 +3264.0 +30 +0.0 +11 +12188.015625 +21 +3264.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12188.015625 +20 +3264.0 +30 +0.0 +11 +12188.015625 +21 +3004.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12188.015625 +20 +3004.001953125 +30 +0.0 +11 +12222.01171875 +21 +2967.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12222.01171875 +20 +2967.99609375 +30 +0.0 +11 +12254.00390625 +21 +2967.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12254.00390625 +20 +2967.99609375 +30 +0.0 +11 +12254.00390625 +21 +2301.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12254.00390625 +20 +2301.99609375 +30 +0.0 +11 +12188.015625 +21 +2284.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13380.01171875 +20 +6640.001953125 +30 +0.0 +11 +13380.01171875 +21 +7122.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13394.00390625 +20 +6640.001953125 +30 +0.0 +11 +13424.00390625 +21 +6590.00390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13424.00390625 +20 +6590.00390625 +30 +0.0 +11 +13424.00390625 +21 +6555.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13424.00390625 +20 +6555.0 +30 +0.0 +11 +13100.00390625 +21 +6493.248046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13100.00390625 +20 +6493.248046875 +30 +0.0 +11 +12914.00390625 +21 +6524.12109375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12914.00390625 +20 +6524.12109375 +30 +0.0 +11 +12786.01171875 +21 +6517.74609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12786.01171875 +20 +6517.74609375 +30 +0.0 +11 +12786.01171875 +21 +6493.248046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12786.01171875 +20 +6493.248046875 +30 +0.0 +11 +12850.0078125 +21 +6468.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12850.0078125 +20 +6468.0 +30 +0.0 +11 +12742.0078125 +21 +6015.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12742.0078125 +20 +6015.498046875 +30 +0.0 +11 +12774.01171875 +21 +6009.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12774.01171875 +20 +6009.0 +30 +0.0 +11 +12818.00390625 +21 +6015.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12818.00390625 +20 +6015.498046875 +30 +0.0 +11 +12850.0078125 +21 +6009.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12850.0078125 +20 +6009.0 +30 +0.0 +11 +12874.0078125 +21 +6015.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12874.0078125 +20 +6015.498046875 +30 +0.0 +11 +12924.01171875 +21 +6015.498046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12924.01171875 +20 +6015.498046875 +30 +0.0 +11 +12952.0078125 +21 +6009.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12952.0078125 +20 +6009.0 +30 +0.0 +11 +12952.0078125 +21 +5979.123046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12952.0078125 +20 +5979.123046875 +30 +0.0 +11 +12899.00390625 +21 +5960.25 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12899.00390625 +20 +5960.25 +30 +0.0 +11 +12899.00390625 +21 +5946.123046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12899.00390625 +20 +5946.123046875 +30 +0.0 +11 +12952.0078125 +21 +5944.37109375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12952.0078125 +20 +5944.37109375 +30 +0.0 +11 +12964.0078125 +21 +5931.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12964.0078125 +20 +5931.99609375 +30 +0.0 +11 +12964.0078125 +21 +5911.5 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12964.0078125 +20 +5911.5 +30 +0.0 +11 +12774.01171875 +21 +5894.373046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12774.01171875 +20 +5894.373046875 +30 +0.0 +11 +12730.0078125 +21 +5385.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12730.0078125 +20 +5385.99609375 +30 +0.0 +11 +12600.01171875 +21 +5385.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12600.01171875 +20 +5385.99609375 +30 +0.0 +11 +12488.015625 +21 +5281.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12488.015625 +20 +5281.998046875 +30 +0.0 +11 +12414.01171875 +21 +5247.24609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12414.01171875 +20 +5247.24609375 +30 +0.0 +11 +12372.01171875 +21 +5264.625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12372.01171875 +20 +5264.625 +30 +0.0 +11 +12344.00390625 +21 +5247.24609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12344.00390625 +20 +5247.24609375 +30 +0.0 +11 +12322.0078125 +21 +5238.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12730.0078125 +20 +5385.99609375 +30 +0.0 +11 +12910.0078125 +21 +5323.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12910.0078125 +20 +5323.998046875 +30 +0.0 +11 +12925.51171875 +21 +5271.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12925.51171875 +20 +5271.99609375 +30 +0.0 +11 +12886.0078125 +21 +5255.935546875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12886.0078125 +20 +5255.935546875 +30 +0.0 +11 +12850.0078125 +21 +5255.49609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12850.0078125 +20 +5255.49609375 +30 +0.0 +11 +12820.0078125 +21 +5216.25 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12820.0078125 +20 +5216.25 +30 +0.0 +11 +12788.00390625 +21 +5223.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12788.00390625 +20 +5223.99609375 +30 +0.0 +11 +12788.00390625 +21 +4693.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12788.00390625 +20 +4693.998046875 +30 +0.0 +11 +12512.00390625 +21 +4693.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12512.00390625 +20 +4693.998046875 +30 +0.0 +11 +12512.00390625 +21 +4320.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12512.00390625 +20 +4320.0 +30 +0.0 +11 +12788.00390625 +21 +4320.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13972.0078125 +20 +6384.0 +30 +0.0 +11 +13972.0078125 +21 +7122.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13972.0078125 +20 +6384.0 +30 +0.0 +11 +13478.00390625 +21 +6384.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13478.00390625 +20 +6384.0 +30 +0.0 +11 +13478.00390625 +21 +6352.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13478.00390625 +20 +6352.001953125 +30 +0.0 +11 +13508.00390625 +21 +6331.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13508.00390625 +20 +6331.998046875 +30 +0.0 +11 +13564.0078125 +21 +6331.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13564.0078125 +20 +6331.998046875 +30 +0.0 +11 +13592.00390625 +21 +6301.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13592.00390625 +20 +6301.998046875 +30 +0.0 +11 +13578.01171875 +21 +6270.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13578.01171875 +20 +6270.0 +30 +0.0 +11 +13536.01171875 +21 +6270.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13536.01171875 +20 +6270.0 +30 +0.0 +11 +13405.9921875 +21 +6259.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13405.9921875 +20 +6259.998046875 +30 +0.0 +11 +13394.00390625 +21 +6241.74609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13394.00390625 +20 +6241.74609375 +30 +0.0 +11 +13405.9921875 +21 +6220.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13405.9921875 +20 +6220.001953125 +30 +0.0 +11 +13436.00390625 +21 +6208.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13436.00390625 +20 +6208.001953125 +30 +0.0 +11 +13424.00390625 +21 +6184.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13424.00390625 +20 +6184.001953125 +30 +0.0 +11 +13436.00390625 +21 +6184.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13436.00390625 +20 +6184.001953125 +30 +0.0 +11 +13446.01171875 +21 +6157.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13446.01171875 +20 +6157.998046875 +30 +0.0 +11 +13493.00390625 +21 +6148.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13493.00390625 +20 +6148.001953125 +30 +0.0 +11 +13564.0078125 +21 +6127.53515625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13564.0078125 +20 +6127.53515625 +30 +0.0 +11 +13621.9921875 +21 +6118.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13621.9921875 +20 +6118.001953125 +30 +0.0 +11 +13621.9921875 +21 +6096.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13621.9921875 +20 +6096.0 +30 +0.0 +11 +13593.0 +21 +6084.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13593.0 +20 +6084.0 +30 +0.0 +11 +13578.01171875 +21 +6049.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13578.01171875 +20 +6049.998046875 +30 +0.0 +11 +13585.51171875 +21 +6031.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13585.51171875 +20 +6031.998046875 +30 +0.0 +11 +13581.76171875 +21 +6009.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13581.76171875 +20 +6009.0 +30 +0.0 +11 +13508.00390625 +21 +5960.25 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13508.00390625 +20 +5960.25 +30 +0.0 +11 +13469.5078125 +21 +5979.123046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13469.5078125 +20 +5979.123046875 +30 +0.0 +11 +13493.00390625 +21 +6009.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13493.00390625 +20 +6009.0 +30 +0.0 +11 +13380.01171875 +21 +6009.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13380.01171875 +20 +6009.0 +30 +0.0 +11 +13380.01171875 +21 +5847.75 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13380.01171875 +20 +5847.75 +30 +0.0 +11 +13332.01171875 +21 +5808.404296875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13332.01171875 +20 +5808.404296875 +30 +0.0 +11 +13312.0078125 +21 +5788.40625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13312.0078125 +20 +5788.40625 +30 +0.0 +11 +13312.0078125 +21 +5729.607421875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13312.0078125 +20 +5729.607421875 +30 +0.0 +11 +13342.0078125 +21 +5630.30859375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13342.0078125 +20 +5630.30859375 +30 +0.0 +11 +13356.01171875 +21 +5569.658203125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13356.01171875 +20 +5569.658203125 +30 +0.0 +11 +13262.00390625 +21 +5513.75390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13262.00390625 +20 +5513.75390625 +30 +0.0 +11 +13262.00390625 +21 +5488.72265625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13262.00390625 +20 +5488.72265625 +30 +0.0 +11 +13168.0078125 +21 +5398.88671875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13168.0078125 +20 +5398.88671875 +30 +0.0 +11 +13080.01171875 +21 +5357.771484375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13080.01171875 +20 +5357.771484375 +30 +0.0 +11 +12976.0078125 +21 +5332.248046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12976.0078125 +20 +5332.248046875 +30 +0.0 +11 +12964.0078125 +21 +5281.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12964.0078125 +20 +5281.998046875 +30 +0.0 +11 +12925.51171875 +21 +5271.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13356.01171875 +20 +5569.658203125 +30 +0.0 +11 +13380.01171875 +21 +5588.484375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13380.01171875 +20 +5588.484375 +30 +0.0 +11 +13380.01171875 +21 +5569.658203125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13380.01171875 +20 +4033.998046875 +30 +0.0 +11 +12788.00390625 +21 +4033.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12788.00390625 +20 +4320.0 +30 +0.0 +11 +12788.00390625 +21 +4033.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13380.01171875 +20 +5569.658203125 +30 +0.0 +11 +13978.0078125 +21 +5569.658203125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13978.0078125 +20 +5569.658203125 +30 +0.0 +11 +13978.0078125 +21 +4383.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13978.0078125 +20 +4383.99609375 +30 +0.0 +11 +13502.00390625 +21 +4383.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12608.00390625 +20 +4033.998046875 +30 +0.0 +11 +12566.00390625 +21 +3997.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12566.00390625 +20 +3997.998046875 +30 +0.0 +11 +12566.00390625 +21 +3603.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12566.00390625 +20 +3603.0 +30 +0.0 +11 +12730.0078125 +21 +3553.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12730.0078125 +20 +3553.998046875 +30 +0.0 +11 +12730.0078125 +21 +3204.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12780.01171875 +20 +2044.001953125 +30 +0.0 +11 +12730.0078125 +21 +2044.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12730.0078125 +20 +2044.001953125 +30 +0.0 +11 +12730.0078125 +21 +2533.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12730.0078125 +20 +2533.998046875 +30 +0.0 +11 +12608.015625 +21 +2533.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12608.015625 +20 +2533.998046875 +30 +0.0 +11 +12608.015625 +21 +2898.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12608.015625 +20 +2898.0 +30 +0.0 +11 +12566.015625 +21 +2943.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12566.015625 +20 +2943.99609375 +30 +0.0 +11 +12540.01171875 +21 +2943.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12540.01171875 +20 +2943.99609375 +30 +0.0 +11 +12520.0078125 +21 +2967.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12520.0078125 +20 +2967.99609375 +30 +0.0 +11 +12566.015625 +21 +2985.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12566.015625 +20 +2985.99609375 +30 +0.0 +11 +12566.015625 +21 +3004.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12566.015625 +20 +3004.001953125 +30 +0.0 +11 +12553.01953125 +21 +3042.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12553.01953125 +20 +3042.0 +30 +0.0 +11 +12566.015625 +21 +3066.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12566.015625 +20 +3066.0 +30 +0.0 +11 +12559.51171875 +21 +3115.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12559.51171875 +20 +3115.998046875 +30 +0.0 +11 +12530.00390625 +21 +3090.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12530.00390625 +20 +3090.99609375 +30 +0.0 +11 +12472.0078125 +21 +3090.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12472.0078125 +20 +3090.99609375 +30 +0.0 +11 +12398.015625 +21 +3115.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12398.015625 +20 +3115.998046875 +30 +0.0 +11 +12314.015625 +21 +3115.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12314.015625 +20 +3115.998046875 +30 +0.0 +11 +12296.015625 +21 +3103.5 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12296.015625 +20 +3103.5 +30 +0.0 +11 +12314.015625 +21 +3090.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12314.015625 +20 +3090.99609375 +30 +0.0 +11 +12314.015625 +21 +3054.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12314.015625 +20 +3054.0 +30 +0.0 +11 +12296.015625 +21 +3013.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12296.015625 +20 +3013.998046875 +30 +0.0 +11 +12254.00390625 +21 +2967.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12608.015625 +20 +2898.0 +30 +0.0 +11 +12640.0078125 +21 +2898.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12640.0078125 +20 +2898.0 +30 +0.0 +11 +12669.01171875 +21 +2910.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12669.01171875 +20 +2910.0 +30 +0.0 +11 +12682.0078125 +21 +2904.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12682.0078125 +20 +2904.0 +30 +0.0 +11 +12675.50390625 +21 +2869.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12675.50390625 +20 +2869.998046875 +30 +0.0 +11 +12704.015625 +21 +2856.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12704.015625 +20 +2856.0 +30 +0.0 +11 +12742.0078125 +21 +2907.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12742.0078125 +20 +2907.0 +30 +0.0 +11 +12755.00390625 +21 +3042.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12755.00390625 +20 +3042.0 +30 +0.0 +11 +12772.0078125 +21 +3134.00390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12772.0078125 +20 +3134.00390625 +30 +0.0 +11 +12730.0078125 +21 +3204.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13372.0078125 +20 +3204.0 +30 +0.0 +11 +13276.0078125 +21 +3276.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13276.0078125 +20 +3276.0 +30 +0.0 +11 +13372.0078125 +21 +3325.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13372.0078125 +20 +3325.998046875 +30 +0.0 +11 +13372.0078125 +21 +3553.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13372.0078125 +20 +3553.998046875 +30 +0.0 +11 +12730.0078125 +21 +3553.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13502.00390625 +20 +4383.99609375 +30 +0.0 +11 +13502.00390625 +21 +3463.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13502.00390625 +20 +3463.998046875 +30 +0.0 +11 +13972.0078125 +21 +3463.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +14290.18359375 +20 +5900.4140625 +30 +0.0 +11 +13882.0078125 +21 +5655.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13882.0078125 +20 +5655.99609375 +30 +0.0 +11 +14290.18359375 +21 +5443.8046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +14290.18359375 +20 +5739.99609375 +30 +0.0 +11 +14019.12890625 +21 +5739.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +14290.18359375 +20 +5541.703125 +30 +0.0 +11 +14105.9765625 +21 +5541.703125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +14290.18359375 +20 +5443.8046875 +30 +0.0 +11 +14290.18359375 +21 +3463.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +0.0 +20 +0.0 +30 +0.0 +11 +0.0 +21 +1528.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +0.0 +20 +1528.001953125 +30 +0.0 +11 +287.7890625 +21 +1776.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +287.7890625 +20 +1776.0 +30 +0.0 +11 +287.7890625 +21 +0.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +287.7890625 +20 +1776.0 +30 +0.0 +11 +287.7890625 +21 +2628.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +287.7890625 +20 +2628.0 +30 +0.0 +11 +0.0 +21 +2628.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +0.0 +20 +2628.0 +30 +0.0 +11 +0.0 +21 +2695.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +0.0 +20 +2695.998046875 +30 +0.0 +11 +115.79296875 +21 +2728.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +115.79296875 +20 +2728.001953125 +30 +0.0 +11 +115.79296875 +21 +2968.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +115.79296875 +20 +2968.001953125 +30 +0.0 +11 +287.7890625 +21 +2968.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +335.7890625 +20 +2968.001953125 +30 +0.0 +11 +335.7890625 +21 +3056.00390625 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +335.7890625 +20 +3056.00390625 +30 +0.0 +11 +285.78515625 +21 +3106.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +285.78515625 +20 +3106.001953125 +30 +0.0 +11 +427.79296875 +21 +3106.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +175.79296875 +20 +1852.001953125 +30 +0.0 +11 +0.0 +21 +1852.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +0.0 +20 +1711.998046875 +30 +0.0 +11 +175.79296875 +21 +1711.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +175.79296875 +20 +1711.998046875 +30 +0.0 +11 +175.79296875 +21 +1852.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +0.0 +20 +6524.12109375 +30 +0.0 +11 +0.0 +21 +7122.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +0.0 +20 +6524.12109375 +30 +0.0 +11 +427.79296875 +21 +6250.875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +427.79296875 +20 +6153.0 +30 +0.0 +11 +0.0 +21 +5892.375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +427.79296875 +20 +5739.99609375 +30 +0.0 +11 +0.0 +21 +5739.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +427.79296875 +20 +5739.99609375 +30 +0.0 +11 +427.79296875 +21 +5541.703125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +427.79296875 +20 +5541.703125 +30 +0.0 +11 +0.0 +21 +5541.703125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +0.0 +20 +5457.99609375 +30 +0.0 +11 +0.0 +21 +3463.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +427.79296875 +20 +4611.99609375 +30 +0.0 +11 +287.7890625 +21 +4611.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +287.7890625 +20 +4611.99609375 +30 +0.0 +11 +287.7890625 +21 +4449.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +287.7890625 +20 +4449.99609375 +30 +0.0 +11 +199.79296875 +21 +4449.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +199.79296875 +20 +4449.99609375 +30 +0.0 +11 +199.79296875 +21 +4129.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +199.79296875 +20 +4129.998046875 +30 +0.0 +11 +427.79296875 +21 +4129.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +0.0 +20 +3463.998046875 +30 +0.0 +11 +427.79296875 +21 +3463.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +283.79296875 +20 +7122.0 +30 +0.0 +11 +283.79296875 +21 +6342.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +427.79296875 +20 +6153.0 +30 +0.0 +11 +427.79296875 +21 +6250.875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +886.013671875 +20 +5539.998046875 +30 +0.0 +11 +1476.01171875 +21 +5539.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +494.009765625 +20 +3462.0 +30 +0.0 +11 +844.013671875 +21 +3462.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +487.013671875 +20 +3108.0 +30 +0.0 +11 +428.015625 +21 +3108.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +2076.01171875 +20 +2532.0 +30 +0.0 +11 +1916.009765625 +21 +2532.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9808.0078125 +20 +3862.998046875 +30 +0.0 +11 +9808.0078125 +21 +4039.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10996.0078125 +20 +3004.001953125 +30 +0.0 +11 +10996.0078125 +21 +3108.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13972.0078125 +20 +2455.998046875 +30 +0.0 +11 +13972.0078125 +21 +3463.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13972.0078125 +20 +2335.998046875 +30 +0.0 +11 +13972.0078125 +21 +2455.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +6240.01171875 +20 +6043.998046875 +30 +0.0 +11 +6836.00390625 +21 +6043.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +8342.953125 +20 +6084.99609375 +30 +0.0 +11 +8336.63671875 +21 +6069.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9812.00390625 +20 +6793.998046875 +30 +0.0 +11 +9812.00390625 +21 +6615.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9812.00390625 +20 +6843.99609375 +30 +0.0 +11 +9812.00390625 +21 +6793.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9812.00390625 +20 +6480.99609375 +30 +0.0 +11 +9812.00390625 +21 +6390.0 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10298.00390625 +20 +5332.248046875 +30 +0.0 +11 +10298.00390625 +21 +5320.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10716.01171875 +20 +4158.0 +30 +0.0 +11 +10716.01171875 +21 +3799.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10819.0078125 +20 +3799.998046875 +30 +0.0 +11 +10895.5078125 +21 +3799.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +13380.01171875 +20 +5569.658203125 +30 +0.0 +11 +13380.01171875 +21 +4033.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +12788.00390625 +20 +4033.998046875 +30 +0.0 +11 +12620.00390625 +21 +4033.998046875 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +287.7890625 +20 +2628.0 +30 +0.0 +11 +287.7890625 +21 +2968.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +287.7890625 +20 +2968.001953125 +30 +0.0 +11 +335.7890625 +21 +2968.001953125 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +9808.0078125 +20 +4039.998046875 +30 +0.0 +11 +9808.0078125 +21 +4509.99609375 +31 +0.0 + 0 +LINE + 8 +BLOCK_2 +10 +10996.0078125 +20 +3108.0 +30 +0.0 +11 +10996.0078125 +21 +3537.99609375 +31 +0.0 + 0 +ENDSEC + 0 +EOF diff --git a/hacks/glx/xlock-gl-utils.c b/hacks/glx/xlock-gl-utils.c index 0d017b8e..e4505ab1 100644 --- a/hacks/glx/xlock-gl-utils.c +++ b/hacks/glx/xlock-gl-utils.c @@ -125,9 +125,12 @@ init_GL(ModeInfo * mi) get_egl_config (dpy, d->egl_display, vid, &d->egl_config); if (!d->egl_config) { + /* get_egl_config already printed this: fprintf (stderr, "%s: no matching EGL config for X11 visual 0x%lx\n", - progname, vi_out->visualid); - abort(); + progname, vi_out->visualid); */ + /* returning 0 might be reasonable, but makes all the GL hacks + simply draw nothing in a loop. */ + exit (1); } d->egl_surface = eglCreatePlatformWindowSurface (d->egl_display, diff --git a/hacks/images/earth.png b/hacks/images/earth.png index 9819dac27b049e173819d04f1aa1b5cfcc80776c..cc98e0e428326819c632cac61133ea593114b44f 100644 GIT binary patch literal 1823722 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≤W*Mc=Gj?&6gja5s{2 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�Nm-knzaivnrc~l%2Yt$P?g<-Rv;nB>w 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 z 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 z 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 z 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

{C>6IGn&u; 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%0A&Zui0OZn^>zMh8 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 k{!h^yKp=D6Y{GB9%t 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