From e5df1aafb6d1346207343ccb858fa373e6b86301 Mon Sep 17 00:00:00 2001 From: Benjamin Barenblat Date: Tue, 23 Nov 2021 23:13:26 -0500 Subject: Palm OS Emulator v3.5 Check in the Palm OS Emulator, version 3.5 (2001). These files come from the tarball present in the Debian archives [1]. The SHA-256 digest of the tarball, c5e0d23424e88525bfba0ecdf0a432a8d93c885d04740df06a9eeee44e5f25e4, matches the digest preserved in the FreeBSD ports tree [2], giving further confidence that these files are as distributed by upstream. [1] http://archive.debian.org/debian/pool/contrib/p/pose/ [2] https://svnweb.freebsd.org/ports/head/palm/pose/distinfo?revision=271305&view=markup&pathrev=282162 --- BuildUnix/Gzip/Makefile.am | 34 + BuildUnix/Gzip/Makefile.in | 325 + BuildUnix/Makefile.am | 429 + BuildUnix/Makefile.in | 659 + BuildUnix/aclocal.m4 | 119 + BuildUnix/config.guess | 951 + BuildUnix/config.sub | 955 + BuildUnix/configure | 3974 +++ BuildUnix/configure.in | 394 + BuildUnix/espws-2.0/Makefile.am | 33 + BuildUnix/espws-2.0/Makefile.in | 348 + BuildUnix/install-sh | 250 + BuildUnix/jpeg/Makefile.am | 84 + BuildUnix/jpeg/Makefile.in | 343 + BuildUnix/missing | 188 + BuildUnix/mkinstalldirs | 40 + Docs/12rollin.pdf | Bin 0 -> 67296 bytes Docs/13hewgil.pdf | Bin 0 -> 41372 bytes Docs/Debugger.html | 854 + Docs/POSER Profiler.rtf | 522 + Docs/UsingPalmOSEmulator.pdf | Bin 0 -> 1543509 bytes Docs/_Bugs.txt | 116 + Docs/_Building.txt | 153 + Docs/_Contributing.txt | 176 + Docs/_Credits.txt | 219 + Docs/_GPL.txt | 340 + Docs/_News.txt | 71 + Docs/_OldNews.txt | 6094 +++++ Docs/_ReadMe.txt | 108 + Docs/_ToDo.txt | 16 + ROMTransfer/Resources/ROM_Transfer.rcp | 43 + ROMTransfer/Resources/ROM_Transfer.rsrc | 0 ROMTransfer/Resources/ROM_Transfer.rsrc.c | 22 + ROMTransfer/Resources/ROM_Transfer.rsrc.h | 50 + ROMTransfer/Resources/ROM_Transfer_icon.pbitm | 32 + ROMTransfer/Source/Makefile | 27 + ROMTransfer/Source/ROM_Transfer | Bin 0 -> 137999 bytes ROMTransfer/Source/ROM_Transfer.c | 768 + ROMTransfer/Source/ROM_Transfer.h | 55 + ROMTransfer/Source/ROM_Transfer.prc | Bin 0 -> 4958 bytes ROMTransfer/Source/SerialPortTools.c | 388 + ROMTransfer/Source/SerialPortTools.h | 52 + Scripting/Perl/EmFunctions.pm | 1023 + Scripting/Perl/EmRPC.pm | 1285 + Scripting/Perl/EmSysTraps.pm | 997 + Scripting/Perl/EmUtils.pm | 228 + Scripting/Perl/FormSpy.pl | 98 + Scripting/Perl/HostControl.pm | 897 + Scripting/Perl/HostControlTest.pl | 87 + Scripting/Perl/ListDatabases.pl | 30 + Scripting/Perl/ListOpenDatabases.pl | 53 + Scripting/Perl/MakeSysTraps.pl | 88 + Scripting/Perl/PoserRPC.pl | 313 + Scripting/Perl/SkipStartup.pl | 43 + Scripting/Python/Poser.py | 471 + Scripting/Python/SysTraps.py | 895 + Scripting/Python/Test.py | 132 + SrcShared/ATraps.cpp | 453 + SrcShared/ATraps.h | 58 + SrcShared/Byteswapping.cpp | 488 + SrcShared/Byteswapping.h | 175 + SrcShared/CGremlins.cpp | 2336 ++ SrcShared/CGremlins.h | 94 + SrcShared/CGremlinsStubs.cpp | 279 + SrcShared/CGremlinsStubs.h | 39 + SrcShared/ChunkFile.cpp | 830 + SrcShared/ChunkFile.h | 131 + SrcShared/DebugMgr.cpp | 2098 ++ SrcShared/DebugMgr.h | 209 + SrcShared/EcmIf.h | 388 + SrcShared/EcmObject.h | 191 + SrcShared/EmAction.cpp | 166 + SrcShared/EmAction.h | 73 + SrcShared/EmApplication.cpp | 1160 + SrcShared/EmApplication.h | 244 + SrcShared/EmAssert.h | 45 + SrcShared/EmCommands.h | 114 + SrcShared/EmCommon.cpp | 14 + SrcShared/EmCommon.h | 141 + SrcShared/EmDevice.cpp | 1374 ++ SrcShared/EmDevice.h | 84 + SrcShared/EmDirRef.cpp | 15 + SrcShared/EmDirRef.h | 91 + SrcShared/EmDlg.cpp | 6319 +++++ SrcShared/EmDlg.h | 922 + SrcShared/EmDocument.cpp | 1211 + SrcShared/EmDocument.h | 188 + SrcShared/EmErrCodes.h | 117 + SrcShared/EmEventOutput.cpp | 2012 ++ SrcShared/EmEventOutput.h | 240 + SrcShared/EmEventPlayback.cpp | 1443 ++ SrcShared/EmEventPlayback.h | 200 + SrcShared/EmException.cpp | 242 + SrcShared/EmException.h | 96 + SrcShared/EmExgMgr.cpp | 681 + SrcShared/EmExgMgr.h | 106 + SrcShared/EmFileImport.cpp | 1823 ++ SrcShared/EmFileImport.h | 96 + SrcShared/EmFileRef.cpp | 57 + SrcShared/EmFileRef.h | 137 + SrcShared/EmJPEG.cpp | 902 + SrcShared/EmJPEG.h | 167 + SrcShared/EmLowMem.cpp | 273 + SrcShared/EmLowMem.h | 41 + SrcShared/EmMapFile.cpp | 144 + SrcShared/EmMapFile.h | 37 + SrcShared/EmMenus.cpp | 1274 + SrcShared/EmMenus.h | 190 + SrcShared/EmMinimize.cpp | 1310 + SrcShared/EmMinimize.h | 133 + SrcShared/EmPalmFunction.cpp | 2046 ++ SrcShared/EmPalmFunction.h | 188 + SrcShared/EmPalmHeap.cpp | 2263 ++ SrcShared/EmPalmHeap.h | 373 + SrcShared/EmPalmOS.cpp | 1752 ++ SrcShared/EmPalmOS.h | 110 + SrcShared/EmPalmStructs.cpp | 100 + SrcShared/EmPalmStructs.h | 1136 + SrcShared/EmPalmStructs.i | 3709 +++ SrcShared/EmPixMap.cpp | 2500 ++ SrcShared/EmPixMap.h | 104 + SrcShared/EmPoint.cpp | 316 + SrcShared/EmPoint.h | 262 + SrcShared/EmQuantizer.cpp | 328 + SrcShared/EmQuantizer.h | 52 + SrcShared/EmROMReader.cpp | 868 + SrcShared/EmROMReader.h | 260 + SrcShared/EmROMTransfer.cpp | 770 + SrcShared/EmROMTransfer.h | 79 + SrcShared/EmRPC.cpp | 451 + SrcShared/EmRPC.h | 47 + SrcShared/EmRect.cpp | 1047 + SrcShared/EmRect.h | 389 + SrcShared/EmRefCounted.cpp | 15 + SrcShared/EmRefCounted.h | 278 + SrcShared/EmRegion.cpp | 1500 ++ SrcShared/EmRegion.h | 216 + SrcShared/EmScreen.cpp | 281 + SrcShared/EmScreen.h | 58 + SrcShared/EmSession.cpp | 2443 ++ SrcShared/EmSession.h | 728 + SrcShared/EmStream.cpp | 591 + SrcShared/EmStream.h | 387 + SrcShared/EmStreamFile.cpp | 595 + SrcShared/EmStreamFile.h | 98 + SrcShared/EmStructs.h | 315 + SrcShared/EmSubroutine.cpp | 3113 +++ SrcShared/EmSubroutine.h | 377 + SrcShared/EmThreadSafeQueue.cpp | 186 + SrcShared/EmThreadSafeQueue.h | 49 + SrcShared/EmTransport.cpp | 669 + SrcShared/EmTransport.h | 143 + SrcShared/EmTransportSerial.cpp | 696 + SrcShared/EmTransportSerial.h | 134 + SrcShared/EmTransportSocket.cpp | 1220 + SrcShared/EmTransportSocket.h | 125 + SrcShared/EmTransportUSB.cpp | 571 + SrcShared/EmTransportUSB.h | 95 + SrcShared/EmTypes.h | 100 + SrcShared/EmWindow.cpp | 1388 ++ SrcShared/EmWindow.h | 177 + SrcShared/ErrorHandling.cpp | 3388 +++ SrcShared/ErrorHandling.h | 515 + SrcShared/Gzip/COPYING | 339 + SrcShared/Gzip/bits.c | 207 + SrcShared/Gzip/crypt.h | 12 + SrcShared/Gzip/deflate.c | 763 + SrcShared/Gzip/gzip.h | 323 + SrcShared/Gzip/inflate.c | 954 + SrcShared/Gzip/lzw.h | 42 + SrcShared/Gzip/revision.h | 16 + SrcShared/Gzip/tailor.h | 328 + SrcShared/Gzip/trees.c | 1076 + SrcShared/Gzip/util.c | 484 + SrcShared/Hardware/EmBankDRAM.cpp | 686 + SrcShared/Hardware/EmBankDRAM.h | 49 + SrcShared/Hardware/EmBankDummy.cpp | 326 + SrcShared/Hardware/EmBankDummy.h | 47 + SrcShared/Hardware/EmBankMapped.cpp | 723 + SrcShared/Hardware/EmBankMapped.h | 55 + SrcShared/Hardware/EmBankROM.cpp | 1617 ++ SrcShared/Hardware/EmBankROM.h | 81 + SrcShared/Hardware/EmBankRegs.cpp | 694 + SrcShared/Hardware/EmBankRegs.h | 56 + SrcShared/Hardware/EmBankSRAM.cpp | 640 + SrcShared/Hardware/EmBankSRAM.h | 58 + SrcShared/Hardware/EmCPU.cpp | 68 + SrcShared/Hardware/EmCPU.h | 69 + SrcShared/Hardware/EmCPU68K.cpp | 1849 ++ SrcShared/Hardware/EmCPU68K.h | 334 + SrcShared/Hardware/EmCPUARM.cpp | 398 + SrcShared/Hardware/EmCPUARM.h | 731 + SrcShared/Hardware/EmHAL.cpp | 939 + SrcShared/Hardware/EmHAL.h | 164 + SrcShared/Hardware/EmMemory.cpp | 1342 + SrcShared/Hardware/EmMemory.h | 457 + SrcShared/Hardware/EmRegs.cpp | 499 + SrcShared/Hardware/EmRegs.h | 77 + SrcShared/Hardware/EmRegs328.cpp | 2803 +++ SrcShared/Hardware/EmRegs328.h | 146 + SrcShared/Hardware/EmRegs328PalmIII.h | 21 + SrcShared/Hardware/EmRegs328PalmPilot.cpp | 82 + SrcShared/Hardware/EmRegs328PalmPilot.h | 30 + SrcShared/Hardware/EmRegs328PalmVII.h | 21 + SrcShared/Hardware/EmRegs328Pilot.h | 21 + SrcShared/Hardware/EmRegs328Prv.h | 45 + SrcShared/Hardware/EmRegs328Symbol1700.cpp | 121 + SrcShared/Hardware/EmRegs328Symbol1700.h | 26 + SrcShared/Hardware/EmRegsASICSymbol1700.cpp | 168 + SrcShared/Hardware/EmRegsASICSymbol1700.h | 44 + SrcShared/Hardware/EmRegsEZ.cpp | 2655 ++ SrcShared/Hardware/EmRegsEZ.h | 143 + SrcShared/Hardware/EmRegsEZPalmIIIc.cpp | 222 + SrcShared/Hardware/EmRegsEZPalmIIIc.h | 48 + SrcShared/Hardware/EmRegsEZPalmIIIe.h | 21 + SrcShared/Hardware/EmRegsEZPalmIIIx.h | 21 + SrcShared/Hardware/EmRegsEZPalmM100.cpp | 247 + SrcShared/Hardware/EmRegsEZPalmM100.h | 41 + SrcShared/Hardware/EmRegsEZPalmV.cpp | 179 + SrcShared/Hardware/EmRegsEZPalmV.h | 42 + SrcShared/Hardware/EmRegsEZPalmVII.cpp | 41 + SrcShared/Hardware/EmRegsEZPalmVII.h | 26 + SrcShared/Hardware/EmRegsEZPalmVIIx.cpp | 192 + SrcShared/Hardware/EmRegsEZPalmVIIx.h | 41 + SrcShared/Hardware/EmRegsEZPalmVx.h | 21 + SrcShared/Hardware/EmRegsEZPrv.h | 45 + SrcShared/Hardware/EmRegsEZTRGpro.cpp | 251 + SrcShared/Hardware/EmRegsEZTRGpro.h | 76 + SrcShared/Hardware/EmRegsEZTemp.cpp | 18 + SrcShared/Hardware/EmRegsEZTemp.h | 18 + SrcShared/Hardware/EmRegsEZVisor.cpp | 243 + SrcShared/Hardware/EmRegsEZVisor.h | 131 + SrcShared/Hardware/EmRegsFrameBuffer.cpp | 241 + SrcShared/Hardware/EmRegsFrameBuffer.h | 52 + SrcShared/Hardware/EmRegsMediaQ11xx.cpp | 4791 ++++ SrcShared/Hardware/EmRegsMediaQ11xx.h | 351 + SrcShared/Hardware/EmRegsPLDPalmVIIEZ.cpp | 210 + SrcShared/Hardware/EmRegsPLDPalmVIIEZ.h | 51 + SrcShared/Hardware/EmRegsPrv.h | 37 + SrcShared/Hardware/EmRegsSED1375.cpp | 506 + SrcShared/Hardware/EmRegsSED1375.h | 70 + SrcShared/Hardware/EmRegsSED1376.cpp | 860 + SrcShared/Hardware/EmRegsSED1376.h | 106 + SrcShared/Hardware/EmRegsSZ.cpp | 17 + SrcShared/Hardware/EmRegsSZ.h | 18 + SrcShared/Hardware/EmRegsSZPrv.h | 19 + SrcShared/Hardware/EmRegsSZTemp.cpp | 17 + SrcShared/Hardware/EmRegsSZTemp.h | 20 + SrcShared/Hardware/EmRegsUSBPhilipsPDIUSBD12.cpp | 154 + SrcShared/Hardware/EmRegsUSBPhilipsPDIUSBD12.h | 42 + SrcShared/Hardware/EmRegsUSBVisor.cpp | 164 + SrcShared/Hardware/EmRegsUSBVisor.h | 44 + SrcShared/Hardware/EmRegsVZ.cpp | 3116 +++ SrcShared/Hardware/EmRegsVZ.h | 145 + SrcShared/Hardware/EmRegsVZHandEra330.cpp | 608 + SrcShared/Hardware/EmRegsVZHandEra330.h | 142 + SrcShared/Hardware/EmRegsVZPalmM500.cpp | 259 + SrcShared/Hardware/EmRegsVZPalmM500.h | 44 + SrcShared/Hardware/EmRegsVZPalmM505.cpp | 151 + SrcShared/Hardware/EmRegsVZPalmM505.h | 36 + SrcShared/Hardware/EmRegsVZPrv.h | 45 + SrcShared/Hardware/EmRegsVZTemp.cpp | 848 + SrcShared/Hardware/EmRegsVZTemp.h | 130 + SrcShared/Hardware/EmRegsVZVisorEdge.cpp | 166 + SrcShared/Hardware/EmRegsVZVisorEdge.h | 30 + SrcShared/Hardware/EmRegsVZVisorPlatinum.cpp | 262 + SrcShared/Hardware/EmRegsVZVisorPlatinum.h | 43 + SrcShared/Hardware/EmRegsVZVisorPrism.cpp | 393 + SrcShared/Hardware/EmRegsVZVisorPrism.h | 37 + SrcShared/Hardware/EmSPISlave.cpp | 51 + SrcShared/Hardware/EmSPISlave.h | 28 + SrcShared/Hardware/EmSPISlaveADS784x.cpp | 428 + SrcShared/Hardware/EmSPISlaveADS784x.h | 97 + SrcShared/Hardware/EmUAEGlue.cpp | 166 + SrcShared/Hardware/EmUAEGlue.h | 17 + SrcShared/Hardware/EmUARTDragonball.cpp | 936 + SrcShared/Hardware/EmUARTDragonball.h | 149 + SrcShared/Hardware/TRG/EmHandEra330Defs.h | 40 + SrcShared/Hardware/TRG/EmHandEraCFBus.h | 28 + SrcShared/Hardware/TRG/EmHandEraSDBus.h | 22 + SrcShared/Hardware/TRG/EmRegs330CPLD.cpp | 263 + SrcShared/Hardware/TRG/EmRegs330CPLD.h | 144 + SrcShared/Hardware/TRG/EmSPISlave330Current.cpp | 189 + SrcShared/Hardware/TRG/EmSPISlave330Current.h | 51 + SrcShared/Hardware/TRG/EmTRG.cpp | 57 + SrcShared/Hardware/TRG/EmTRG.h | 23 + SrcShared/Hardware/TRG/EmTRGATA.cpp | 471 + SrcShared/Hardware/TRG/EmTRGATA.h | 63 + SrcShared/Hardware/TRG/EmTRGCF.cpp | 305 + SrcShared/Hardware/TRG/EmTRGCF.h | 58 + SrcShared/Hardware/TRG/EmTRGCFDefs.h | 187 + SrcShared/Hardware/TRG/EmTRGCFIO.cpp | 236 + SrcShared/Hardware/TRG/EmTRGCFIO.h | 90 + SrcShared/Hardware/TRG/EmTRGCFMem.cpp | 349 + SrcShared/Hardware/TRG/EmTRGCFMem.h | 66 + SrcShared/Hardware/TRG/EmTRGDiskIO.cpp | 174 + SrcShared/Hardware/TRG/EmTRGDiskIO.h | 53 + SrcShared/Hardware/TRG/EmTRGDiskType.cpp | 511 + SrcShared/Hardware/TRG/EmTRGDiskType.h | 65 + SrcShared/Hardware/TRG/EmTRGSD.cpp | 321 + SrcShared/Hardware/TRG/EmTRGSD.h | 64 + SrcShared/Hordes.cpp | 2437 ++ SrcShared/Hordes.h | 153 + SrcShared/HostControl.cpp | 4989 ++++ SrcShared/HostControl.h | 938 + SrcShared/HostControlPrv.h | 35 + SrcShared/LoadApplication.cpp | 381 + SrcShared/LoadApplication.h | 22 + SrcShared/Logging.cpp | 1547 ++ SrcShared/Logging.h | 222 + SrcShared/Marshal.cpp | 1828 ++ SrcShared/Marshal.h | 755 + SrcShared/MetaMemory.cpp | 4096 ++++ SrcShared/MetaMemory.h | 668 + SrcShared/Miscellaneous.cpp | 2954 +++ SrcShared/Miscellaneous.h | 178 + SrcShared/Palm.h | 233 + .../Palm/Device/328Jerry/IncsPrv/HardwareTD1.h | 221 + .../Palm/Device/EZAustin/IncsPrv/HardwareAustin.h | 214 + .../Palm/Device/EZAustin/IncsPrv/SED1375Hwr.h | 240 + SrcShared/Palm/Device/EZSumo/IncsPrv/HardwareEZ.h | 239 + SrcShared/Palm/Device/VZTrn/IncsPrv/HardwareVZ.h | 285 + .../Palm/Platform/Core/Hardware/IncsPrv/Hardware.h | 156 + .../Platform/Core/Hardware/IncsPrv/HwrROMToken.h | 136 + .../Platform/Core/Hardware/IncsPrv/M68328Hwr.h | 644 + .../Platform/Core/Hardware/IncsPrv/M68EZ328Hwr.h | 708 + .../Platform/Core/Hardware/IncsPrv/M68SZ328Hwr.h | 1078 + .../Platform/Core/Hardware/IncsPrv/M68VZ328Hwr.h | 844 + .../Palm/Platform/Core/System/IncsPrv/DataPrv.h | 308 + .../Palm/Platform/Core/System/IncsPrv/DebugPrv.h | 439 + .../Palm/Platform/Core/System/IncsPrv/Globals.h | 574 + .../Palm/Platform/Core/System/IncsPrv/MemoryPrv.h | 603 + .../Platform/Core/System/IncsPrv/SerialLinkPrv.h | 90 + .../Palm/Platform/Core/System/IncsPrv/SysEvtPrv.h | 227 + .../Palm/Platform/Core/System/IncsPrv/SystemPrv.h | 474 + SrcShared/Palm/Platform/Core/System/Src/Crc.c | 257 + SrcShared/Palm/Platform/Incs/BuildDefaults.h | 309 + SrcShared/Palm/Platform/Incs/BuildDefines.h | 159 + SrcShared/Palm/Platform/Incs/Core/CoreTraps.h | 1505 ++ SrcShared/Palm/Platform/Incs/Core/Hardware/HAL.h | 99 + .../Platform/Incs/Core/Hardware/HwrMiscFlags.h | 220 + .../Palm/Platform/Incs/Core/Hardware/M68KHwr.h | 113 + SrcShared/Palm/Platform/Incs/Core/System/Bitmap.h | 151 + .../Palm/Platform/Incs/Core/System/CharAttr.h | 129 + SrcShared/Palm/Platform/Incs/Core/System/Chars.h | 411 + SrcShared/Palm/Platform/Incs/Core/System/Crc.h | 63 + .../Palm/Platform/Incs/Core/System/DLCommon.h | 2433 ++ .../Palm/Platform/Incs/Core/System/DLServer.h | 418 + SrcShared/Palm/Platform/Incs/Core/System/DataMgr.h | 540 + .../Palm/Platform/Incs/Core/System/DateTime.h | 283 + .../Palm/Platform/Incs/Core/System/ErrorBase.h | 294 + .../Palm/Platform/Incs/Core/System/FeatureMgr.h | 89 + SrcShared/Palm/Platform/Incs/Core/System/Font.h | 150 + SrcShared/Palm/Platform/Incs/Core/System/IntlMgr.h | 113 + SrcShared/Palm/Platform/Incs/Core/System/KeyMgr.h | 76 + .../Palm/Platform/Incs/Core/System/LocaleMgr.h | 230 + .../Palm/Platform/Incs/Core/System/Localize.h | 54 + .../Palm/Platform/Incs/Core/System/MemoryMgr.h | 341 + .../Palm/Platform/Incs/Core/System/NetBitUtils.h | 135 + SrcShared/Palm/Platform/Incs/Core/System/NetMgr.h | 1515 ++ .../Palm/Platform/Incs/Core/System/OverlayMgr.h | 214 + .../Palm/Platform/Incs/Core/System/PalmLocale.h | 1258 + SrcShared/Palm/Platform/Incs/Core/System/PenMgr.h | 98 + .../Palm/Platform/Incs/Core/System/Preferences.h | 428 + SrcShared/Palm/Platform/Incs/Core/System/Rect.h | 83 + .../Palm/Platform/Incs/Core/System/SerialLinkMgr.h | 437 + .../Palm/Platform/Incs/Core/System/SerialMgr.h | 371 + .../Palm/Platform/Incs/Core/System/SoundMgr.h | 317 + .../Palm/Platform/Incs/Core/System/SysEvent.h | 204 + .../Palm/Platform/Incs/Core/System/SysEvtMgr.h | 252 + .../Palm/Platform/Incs/Core/System/SystemMgr.h | 1191 + .../Palm/Platform/Incs/Core/System/SystemPkt.h | 430 + .../Platform/Incs/Core/System/SystemResources.h | 346 + SrcShared/Palm/Platform/Incs/Core/System/TextMgr.h | 411 + SrcShared/Palm/Platform/Incs/Core/System/Window.h | 559 + .../Palm/Platform/Incs/Core/UI/AttentionMgr.h | 209 + SrcShared/Palm/Platform/Incs/Core/UI/Control.h | 188 + SrcShared/Palm/Platform/Incs/Core/UI/Event.h | 347 + SrcShared/Palm/Platform/Incs/Core/UI/FatalAlert.h | 43 + SrcShared/Palm/Platform/Incs/Core/UI/Field.h | 275 + SrcShared/Palm/Platform/Incs/Core/UI/Find.h | 124 + SrcShared/Palm/Platform/Incs/Core/UI/Form.h | 510 + SrcShared/Palm/Platform/Incs/Core/UI/InsPoint.h | 60 + SrcShared/Palm/Platform/Incs/Core/UI/List.h | 134 + SrcShared/Palm/Platform/Incs/Core/UI/ScrollBar.h | 77 + SrcShared/Palm/Platform/Incs/Core/UI/Table.h | 319 + SrcShared/Palm/Platform/Incs/Core/UI/UIResources.h | 322 + SrcShared/Palm/Platform/Incs/Libraries/LibTraps.h | 43 + SrcShared/Palm/Platform/Incs/PalmTypes.h | 303 + SrcShared/PalmOptErrorCheckLevel.h | 28 + SrcShared/PalmPack.h | 25 + SrcShared/PalmPackPop.h | 24 + SrcShared/Patches/EmPatchIf.h | 150 + SrcShared/Patches/EmPatchLoader.cpp | 129 + SrcShared/Patches/EmPatchLoader.h | 74 + SrcShared/Patches/EmPatchMgr.cpp | 1203 + SrcShared/Patches/EmPatchMgr.h | 103 + SrcShared/Patches/EmPatchModule.cpp | 318 + SrcShared/Patches/EmPatchModule.h | 118 + SrcShared/Patches/EmPatchModuleHtal.cpp | 89 + SrcShared/Patches/EmPatchModuleHtal.h | 30 + SrcShared/Patches/EmPatchModuleMap.cpp | 146 + SrcShared/Patches/EmPatchModuleMap.h | 100 + SrcShared/Patches/EmPatchModuleMemMgr.cpp | 1902 ++ SrcShared/Patches/EmPatchModuleNetLib.cpp | 4100 ++++ SrcShared/Patches/EmPatchModuleNetLib.h | 27 + SrcShared/Patches/EmPatchModuleSys.cpp | 3217 +++ SrcShared/Patches/EmPatchModuleSys.h | 271 + SrcShared/Patches/EmPatchModuleTypes.h | 94 + SrcShared/Patches/EmPatchState.cpp | 1034 + SrcShared/Patches/EmPatchState.h | 264 + SrcShared/Platform.h | 218 + SrcShared/Platform_NetLib.h | 100 + SrcShared/Platform_NetLib_Sck.cpp | 3436 +++ SrcShared/PreferenceMgr.cpp | 2564 ++ SrcShared/PreferenceMgr.h | 409 + SrcShared/Profiling.cpp | 2111 ++ SrcShared/Profiling.h | 333 + SrcShared/ROMStubs.cpp | 3220 +++ SrcShared/ROMStubs.h | 191 + SrcShared/SLP.cpp | 1074 + SrcShared/SLP.h | 74 + SrcShared/SessionFile.cpp | 1142 + SrcShared/SessionFile.h | 257 + SrcShared/Skins.cpp | 1485 ++ SrcShared/Skins.h | 95 + SrcShared/SocketMessaging.cpp | 1170 + SrcShared/SocketMessaging.h | 95 + SrcShared/Startup.cpp | 1642 ++ SrcShared/Startup.h | 88 + SrcShared/String2 | 193 + SrcShared/StringConversions.cpp | 370 + SrcShared/StringConversions.h | 78 + SrcShared/StringData.cpp | 265 + SrcShared/StringData.h | 25 + SrcShared/Strings.r.h | 549 + SrcShared/Strings.txt | 7302 ++++++ SrcShared/Switches.h | 267 + SrcShared/SystemPacket.cpp | 1282 + SrcShared/SystemPacket.h | 52 + SrcShared/TracerCommon.cpp | 310 + SrcShared/TracerCommon.h | 88 + SrcShared/TracerPlatform.h | 57 + SrcShared/UAE/UAE.h | 21 + SrcShared/UAE/build68k.c | 246 + SrcShared/UAE/compiler.h | 106 + SrcShared/UAE/config.h | 77 + SrcShared/UAE/cpudefs.c | 173 + SrcShared/UAE/cpuemu.c | 24243 +++++++++++++++++++ SrcShared/UAE/cpuemu1.c | 53 + SrcShared/UAE/cpuemu2.c | 53 + SrcShared/UAE/cpuemu3.c | 53 + SrcShared/UAE/cpuemu4.c | 53 + SrcShared/UAE/cpuemu5.c | 53 + SrcShared/UAE/cpuemu6.c | 53 + SrcShared/UAE/cpuemu7.c | 53 + SrcShared/UAE/cpuemu8.c | 53 + SrcShared/UAE/cpustbl.c | 1590 ++ SrcShared/UAE/cputbl.h | 1584 ++ SrcShared/UAE/custom.h | 30 + SrcShared/UAE/gencpu.c | 3346 +++ SrcShared/UAE/machdep_m68k.h | 56 + SrcShared/UAE/machdep_maccess.h | 27 + SrcShared/UAE/memory_cpu.h | 13 + SrcShared/UAE/missing.c | 36 + SrcShared/UAE/newcpu.h | 230 + SrcShared/UAE/options.h | 30 + SrcShared/UAE/readcpu.cpp | 808 + SrcShared/UAE/readcpu.h | 113 + SrcShared/UAE/sysconfig.h | 33 + SrcShared/UAE/sysdeps.h | 348 + SrcShared/UAE/table68k | 242 + SrcShared/UAE/target.h | 4 + SrcShared/jpeg/cderror.h | 132 + SrcShared/jpeg/jcapimin.c | 280 + SrcShared/jpeg/jcapistd.c | 161 + SrcShared/jpeg/jccoefct.c | 449 + SrcShared/jpeg/jccolor.c | 459 + SrcShared/jpeg/jcdctmgr.c | 387 + SrcShared/jpeg/jchuff.c | 909 + SrcShared/jpeg/jchuff.h | 47 + SrcShared/jpeg/jcinit.c | 72 + SrcShared/jpeg/jcmainct.c | 293 + SrcShared/jpeg/jcmarker.c | 664 + SrcShared/jpeg/jcmaster.c | 590 + SrcShared/jpeg/jcomapi.c | 106 + SrcShared/jpeg/jcparam.c | 610 + SrcShared/jpeg/jcphuff.c | 833 + SrcShared/jpeg/jcprepct.c | 354 + SrcShared/jpeg/jcsample.c | 519 + SrcShared/jpeg/jctrans.c | 388 + SrcShared/jpeg/jdapimin.c | 395 + SrcShared/jpeg/jdapistd.c | 275 + SrcShared/jpeg/jdatadst.c | 151 + SrcShared/jpeg/jdatasrc.c | 212 + SrcShared/jpeg/jdcoefct.c | 736 + SrcShared/jpeg/jdcolor.c | 396 + SrcShared/jpeg/jdct.h | 176 + SrcShared/jpeg/jddctmgr.c | 269 + SrcShared/jpeg/jdhuff.c | 651 + SrcShared/jpeg/jdhuff.h | 201 + SrcShared/jpeg/jdinput.c | 381 + SrcShared/jpeg/jdmainct.c | 512 + SrcShared/jpeg/jdmarker.c | 1360 ++ SrcShared/jpeg/jdmaster.c | 557 + SrcShared/jpeg/jdmerge.c | 400 + SrcShared/jpeg/jdphuff.c | 668 + SrcShared/jpeg/jdpostct.c | 290 + SrcShared/jpeg/jdsample.c | 478 + SrcShared/jpeg/jdtrans.c | 143 + SrcShared/jpeg/jerror.c | 252 + SrcShared/jpeg/jerror.h | 291 + SrcShared/jpeg/jfdctflt.c | 168 + SrcShared/jpeg/jfdctfst.c | 224 + SrcShared/jpeg/jfdctint.c | 283 + SrcShared/jpeg/jidctflt.c | 242 + SrcShared/jpeg/jidctfst.c | 368 + SrcShared/jpeg/jidctint.c | 389 + SrcShared/jpeg/jidctred.c | 398 + SrcShared/jpeg/jinclude.h | 91 + SrcShared/jpeg/jmemmac.c | 383 + SrcShared/jpeg/jmemmgr.c | 1118 + SrcShared/jpeg/jmemnobs.c | 109 + SrcShared/jpeg/jmemsys.h | 198 + SrcShared/jpeg/jmorecfg.h | 363 + SrcShared/jpeg/jpegint.h | 392 + SrcShared/jpeg/jpeglib.h | 1096 + SrcShared/jpeg/jquant1.c | 856 + SrcShared/jpeg/jquant2.c | 1310 + SrcShared/jpeg/jutils.c | 179 + SrcShared/jpeg/jversion.h | 14 + SrcShared/omnithread/mach.cpp | 643 + SrcShared/omnithread/mach.h | 51 + SrcShared/omnithread/nt.cpp | 876 + SrcShared/omnithread/nt.h | 65 + SrcShared/omnithread/null_thread.cpp | 335 + SrcShared/omnithread/null_thread.h | 40 + SrcShared/omnithread/omnithread.h | 542 + SrcShared/omnithread/posix.cpp | 898 + SrcShared/omnithread/posix.h | 57 + SrcShared/omnithread/solaris.cpp | 533 + SrcShared/omnithread/solaris.h | 47 + SrcShared/xstring2 | 638 + SrcUnix/DefaultLarge.xpm | 732 + SrcUnix/DefaultSmall.xpm | 401 + SrcUnix/EmApplicationFltk.cpp | 494 + SrcUnix/EmApplicationFltk.h | 50 + SrcUnix/EmCommonUnix.h | 90 + SrcUnix/EmDirRefUnix.cpp | 506 + SrcUnix/EmDirRefUnix.h | 19 + SrcUnix/EmDlgFltk.cpp | 2497 ++ SrcUnix/EmDlgFltk.h | 62 + SrcUnix/EmDlgFltkFactory.fl | 1157 + SrcUnix/EmDocumentUnix.cpp | 142 + SrcUnix/EmDocumentUnix.h | 40 + SrcUnix/EmFileRefUnix.cpp | 547 + SrcUnix/EmFileRefUnix.h | 19 + SrcUnix/EmMenusFltk.cpp | 94 + SrcUnix/EmMenusFltk.h | 25 + SrcUnix/EmPixMapUnix.cpp | 48 + SrcUnix/EmPixMapUnix.h | 22 + SrcUnix/EmTransportSerialUnix.cpp | 1211 + SrcUnix/EmTransportSerialUnix.h | 68 + SrcUnix/EmTransportUSBUnix.cpp | 394 + SrcUnix/EmTransportUSBUnix.h | 36 + SrcUnix/EmWindowFltk.cpp | 777 + SrcUnix/EmWindowFltk.h | 78 + SrcUnix/Platform_Unix.cpp | 850 + SrcUnix/ResStrings.h | 19 + SrcUnix/espws-2.0/CheckButton.cxx | 113 + SrcUnix/espws-2.0/CheckButton.h | 52 + SrcUnix/espws-2.0/CheckButton.html | 61 + SrcUnix/espws-2.0/FileBrowser.cxx | 518 + SrcUnix/espws-2.0/FileBrowser.h | 71 + SrcUnix/espws-2.0/FileBrowser.html | 79 + SrcUnix/espws-2.0/FileChooser.cxx | 249 + SrcUnix/espws-2.0/FileChooser.fl | 189 + SrcUnix/espws-2.0/FileChooser.gif | Bin 0 -> 10760 bytes SrcUnix/espws-2.0/FileChooser.h | 82 + SrcUnix/espws-2.0/FileChooser.html | 172 + SrcUnix/espws-2.0/FileChooser2.cxx | 645 + SrcUnix/espws-2.0/FileIcon.cxx | 1217 + SrcUnix/espws-2.0/FileIcon.h | 112 + SrcUnix/espws-2.0/FileIcon.html | 165 + SrcUnix/espws-2.0/FileInput.cxx | 75 + SrcUnix/espws-2.0/FileInput.h | 52 + SrcUnix/espws-2.0/FileInput.html | 56 + SrcUnix/espws-2.0/Fl_Wizard.cxx | 201 + SrcUnix/espws-2.0/Fl_Wizard.h | 59 + SrcUnix/espws-2.0/Fl_Wizard.html | 75 + SrcUnix/espws-2.0/HelpApp.cxx | 470 + SrcUnix/espws-2.0/HelpApp.fl | 380 + SrcUnix/espws-2.0/HelpApp.gif | Bin 0 -> 7556 bytes SrcUnix/espws-2.0/HelpApp.h | 135 + SrcUnix/espws-2.0/HelpApp2.cxx | 546 + SrcUnix/espws-2.0/HelpDialog.cxx | 219 + SrcUnix/espws-2.0/HelpDialog.fl | 188 + SrcUnix/espws-2.0/HelpDialog.gif | Bin 0 -> 12984 bytes SrcUnix/espws-2.0/HelpDialog.h | 53 + SrcUnix/espws-2.0/HelpDialog.html | 89 + SrcUnix/espws-2.0/HelpView.cxx | 1799 ++ SrcUnix/espws-2.0/HelpView.h | 180 + SrcUnix/espws-2.0/HelpView.html | 130 + SrcUnix/espws-2.0/Makefile.in | 121 + SrcUnix/espws-2.0/allfiles.xbm | 6 + SrcUnix/espws-2.0/configure | 1865 ++ SrcUnix/espws-2.0/configure.in | 69 + SrcUnix/espws-2.0/documentation.html | 73 + SrcUnix/espws-2.0/download.html | 54 + SrcUnix/espws-2.0/espws.book | 18 + SrcUnix/espws-2.0/espws.pdf | 1378 ++ SrcUnix/espws-2.0/file.html | 76 + SrcUnix/espws-2.0/flsurf.cxx | 67 + SrcUnix/espws-2.0/flsurf.gif | Bin 0 -> 4849 bytes SrcUnix/espws-2.0/flsurf.html | 66 + SrcUnix/espws-2.0/fltk.css | 6 + SrcUnix/espws-2.0/help.html | 44 + SrcUnix/espws-2.0/home.xbm | 6 + SrcUnix/espws-2.0/index.html | 57 + SrcUnix/espws-2.0/intro.html | 57 + SrcUnix/espws-2.0/navbar.gif | Bin 0 -> 2367 bytes SrcUnix/espws-2.0/new.xbm | 6 + SrcUnix/espws-2.0/next.xbm | 12 + SrcUnix/espws-2.0/prev.xbm | 12 + SrcUnix/espws-2.0/relnotes.html | 209 + SrcUnix/espws-2.0/reload.xbm | 6 + SrcUnix/espws-2.0/reset.xbm | 4 + SrcUnix/espws-2.0/stop.xbm | 6 + SrcUnix/espws-2.0/testfile.cxx | 141 + SrcUnix/espws-2.0/testhelp.cxx | 66 + SrcUnix/espws-2.0/up.xbm | 6 + SrcUnix/espws-2.0/widgets.html | 61 + SrcUnix/espws.diff | 139 + SrcUnix/jconfig.h | 46 + SrcUnix/poser.xpm | 54 + Tools/Strings2Resource.pl | 248 + Tools/s2r.sh | 6 + 637 files changed, 320876 insertions(+) create mode 100644 BuildUnix/Gzip/Makefile.am create mode 100644 BuildUnix/Gzip/Makefile.in create mode 100644 BuildUnix/Makefile.am create mode 100644 BuildUnix/Makefile.in create mode 100644 BuildUnix/aclocal.m4 create mode 100755 BuildUnix/config.guess create mode 100755 BuildUnix/config.sub create mode 100755 BuildUnix/configure create mode 100644 BuildUnix/configure.in create mode 100644 BuildUnix/espws-2.0/Makefile.am create mode 100644 BuildUnix/espws-2.0/Makefile.in create mode 100755 BuildUnix/install-sh create mode 100644 BuildUnix/jpeg/Makefile.am create mode 100644 BuildUnix/jpeg/Makefile.in create mode 100755 BuildUnix/missing create mode 100755 BuildUnix/mkinstalldirs create mode 100644 Docs/12rollin.pdf create mode 100644 Docs/13hewgil.pdf create mode 100644 Docs/Debugger.html create mode 100644 Docs/POSER Profiler.rtf create mode 100644 Docs/UsingPalmOSEmulator.pdf create mode 100644 Docs/_Bugs.txt create mode 100644 Docs/_Building.txt create mode 100644 Docs/_Contributing.txt create mode 100644 Docs/_Credits.txt create mode 100644 Docs/_GPL.txt create mode 100644 Docs/_News.txt create mode 100644 Docs/_OldNews.txt create mode 100644 Docs/_ReadMe.txt create mode 100644 Docs/_ToDo.txt create mode 100644 ROMTransfer/Resources/ROM_Transfer.rcp create mode 100644 ROMTransfer/Resources/ROM_Transfer.rsrc create mode 100644 ROMTransfer/Resources/ROM_Transfer.rsrc.c create mode 100644 ROMTransfer/Resources/ROM_Transfer.rsrc.h create mode 100644 ROMTransfer/Resources/ROM_Transfer_icon.pbitm create mode 100644 ROMTransfer/Source/Makefile create mode 100755 ROMTransfer/Source/ROM_Transfer create mode 100644 ROMTransfer/Source/ROM_Transfer.c create mode 100644 ROMTransfer/Source/ROM_Transfer.h create mode 100644 ROMTransfer/Source/ROM_Transfer.prc create mode 100644 ROMTransfer/Source/SerialPortTools.c create mode 100644 ROMTransfer/Source/SerialPortTools.h create mode 100644 Scripting/Perl/EmFunctions.pm create mode 100644 Scripting/Perl/EmRPC.pm create mode 100644 Scripting/Perl/EmSysTraps.pm create mode 100644 Scripting/Perl/EmUtils.pm create mode 100755 Scripting/Perl/FormSpy.pl create mode 100644 Scripting/Perl/HostControl.pm create mode 100644 Scripting/Perl/HostControlTest.pl create mode 100755 Scripting/Perl/ListDatabases.pl create mode 100755 Scripting/Perl/ListOpenDatabases.pl create mode 100644 Scripting/Perl/MakeSysTraps.pl create mode 100755 Scripting/Perl/PoserRPC.pl create mode 100755 Scripting/Perl/SkipStartup.pl create mode 100644 Scripting/Python/Poser.py create mode 100644 Scripting/Python/SysTraps.py create mode 100644 Scripting/Python/Test.py create mode 100644 SrcShared/ATraps.cpp create mode 100644 SrcShared/ATraps.h create mode 100644 SrcShared/Byteswapping.cpp create mode 100644 SrcShared/Byteswapping.h create mode 100644 SrcShared/CGremlins.cpp create mode 100644 SrcShared/CGremlins.h create mode 100644 SrcShared/CGremlinsStubs.cpp create mode 100644 SrcShared/CGremlinsStubs.h create mode 100644 SrcShared/ChunkFile.cpp create mode 100644 SrcShared/ChunkFile.h create mode 100644 SrcShared/DebugMgr.cpp create mode 100644 SrcShared/DebugMgr.h create mode 100644 SrcShared/EcmIf.h create mode 100644 SrcShared/EcmObject.h create mode 100644 SrcShared/EmAction.cpp create mode 100644 SrcShared/EmAction.h create mode 100644 SrcShared/EmApplication.cpp create mode 100644 SrcShared/EmApplication.h create mode 100644 SrcShared/EmAssert.h create mode 100644 SrcShared/EmCommands.h create mode 100644 SrcShared/EmCommon.cpp create mode 100644 SrcShared/EmCommon.h create mode 100644 SrcShared/EmDevice.cpp create mode 100644 SrcShared/EmDevice.h create mode 100644 SrcShared/EmDirRef.cpp create mode 100644 SrcShared/EmDirRef.h create mode 100644 SrcShared/EmDlg.cpp create mode 100644 SrcShared/EmDlg.h create mode 100644 SrcShared/EmDocument.cpp create mode 100644 SrcShared/EmDocument.h create mode 100644 SrcShared/EmErrCodes.h create mode 100644 SrcShared/EmEventOutput.cpp create mode 100644 SrcShared/EmEventOutput.h create mode 100644 SrcShared/EmEventPlayback.cpp create mode 100644 SrcShared/EmEventPlayback.h create mode 100644 SrcShared/EmException.cpp create mode 100644 SrcShared/EmException.h create mode 100644 SrcShared/EmExgMgr.cpp create mode 100644 SrcShared/EmExgMgr.h create mode 100644 SrcShared/EmFileImport.cpp create mode 100644 SrcShared/EmFileImport.h create mode 100644 SrcShared/EmFileRef.cpp create mode 100644 SrcShared/EmFileRef.h create mode 100644 SrcShared/EmJPEG.cpp create mode 100644 SrcShared/EmJPEG.h create mode 100644 SrcShared/EmLowMem.cpp create mode 100644 SrcShared/EmLowMem.h create mode 100644 SrcShared/EmMapFile.cpp create mode 100644 SrcShared/EmMapFile.h create mode 100644 SrcShared/EmMenus.cpp create mode 100644 SrcShared/EmMenus.h create mode 100644 SrcShared/EmMinimize.cpp create mode 100644 SrcShared/EmMinimize.h create mode 100644 SrcShared/EmPalmFunction.cpp create mode 100644 SrcShared/EmPalmFunction.h create mode 100644 SrcShared/EmPalmHeap.cpp create mode 100644 SrcShared/EmPalmHeap.h create mode 100644 SrcShared/EmPalmOS.cpp create mode 100644 SrcShared/EmPalmOS.h create mode 100644 SrcShared/EmPalmStructs.cpp create mode 100644 SrcShared/EmPalmStructs.h create mode 100644 SrcShared/EmPalmStructs.i create mode 100644 SrcShared/EmPixMap.cpp create mode 100644 SrcShared/EmPixMap.h create mode 100644 SrcShared/EmPoint.cpp create mode 100644 SrcShared/EmPoint.h create mode 100644 SrcShared/EmQuantizer.cpp create mode 100644 SrcShared/EmQuantizer.h create mode 100644 SrcShared/EmROMReader.cpp create mode 100644 SrcShared/EmROMReader.h create mode 100644 SrcShared/EmROMTransfer.cpp create mode 100644 SrcShared/EmROMTransfer.h create mode 100644 SrcShared/EmRPC.cpp create mode 100644 SrcShared/EmRPC.h create mode 100644 SrcShared/EmRect.cpp create mode 100644 SrcShared/EmRect.h create mode 100644 SrcShared/EmRefCounted.cpp create mode 100644 SrcShared/EmRefCounted.h create mode 100644 SrcShared/EmRegion.cpp create mode 100644 SrcShared/EmRegion.h create mode 100644 SrcShared/EmScreen.cpp create mode 100644 SrcShared/EmScreen.h create mode 100644 SrcShared/EmSession.cpp create mode 100644 SrcShared/EmSession.h create mode 100644 SrcShared/EmStream.cpp create mode 100644 SrcShared/EmStream.h create mode 100644 SrcShared/EmStreamFile.cpp create mode 100644 SrcShared/EmStreamFile.h create mode 100644 SrcShared/EmStructs.h create mode 100644 SrcShared/EmSubroutine.cpp create mode 100644 SrcShared/EmSubroutine.h create mode 100644 SrcShared/EmThreadSafeQueue.cpp create mode 100644 SrcShared/EmThreadSafeQueue.h create mode 100644 SrcShared/EmTransport.cpp create mode 100644 SrcShared/EmTransport.h create mode 100644 SrcShared/EmTransportSerial.cpp create mode 100644 SrcShared/EmTransportSerial.h create mode 100644 SrcShared/EmTransportSocket.cpp create mode 100644 SrcShared/EmTransportSocket.h create mode 100644 SrcShared/EmTransportUSB.cpp create mode 100644 SrcShared/EmTransportUSB.h create mode 100644 SrcShared/EmTypes.h create mode 100644 SrcShared/EmWindow.cpp create mode 100644 SrcShared/EmWindow.h create mode 100644 SrcShared/ErrorHandling.cpp create mode 100644 SrcShared/ErrorHandling.h create mode 100644 SrcShared/Gzip/COPYING create mode 100644 SrcShared/Gzip/bits.c create mode 100644 SrcShared/Gzip/crypt.h create mode 100644 SrcShared/Gzip/deflate.c create mode 100644 SrcShared/Gzip/gzip.h create mode 100644 SrcShared/Gzip/inflate.c create mode 100644 SrcShared/Gzip/lzw.h create mode 100644 SrcShared/Gzip/revision.h create mode 100644 SrcShared/Gzip/tailor.h create mode 100644 SrcShared/Gzip/trees.c create mode 100644 SrcShared/Gzip/util.c create mode 100644 SrcShared/Hardware/EmBankDRAM.cpp create mode 100644 SrcShared/Hardware/EmBankDRAM.h create mode 100644 SrcShared/Hardware/EmBankDummy.cpp create mode 100644 SrcShared/Hardware/EmBankDummy.h create mode 100644 SrcShared/Hardware/EmBankMapped.cpp create mode 100644 SrcShared/Hardware/EmBankMapped.h create mode 100644 SrcShared/Hardware/EmBankROM.cpp create mode 100644 SrcShared/Hardware/EmBankROM.h create mode 100644 SrcShared/Hardware/EmBankRegs.cpp create mode 100644 SrcShared/Hardware/EmBankRegs.h create mode 100644 SrcShared/Hardware/EmBankSRAM.cpp create mode 100644 SrcShared/Hardware/EmBankSRAM.h create mode 100644 SrcShared/Hardware/EmCPU.cpp create mode 100644 SrcShared/Hardware/EmCPU.h create mode 100644 SrcShared/Hardware/EmCPU68K.cpp create mode 100644 SrcShared/Hardware/EmCPU68K.h create mode 100644 SrcShared/Hardware/EmCPUARM.cpp create mode 100644 SrcShared/Hardware/EmCPUARM.h create mode 100644 SrcShared/Hardware/EmHAL.cpp create mode 100644 SrcShared/Hardware/EmHAL.h create mode 100644 SrcShared/Hardware/EmMemory.cpp create mode 100644 SrcShared/Hardware/EmMemory.h create mode 100644 SrcShared/Hardware/EmRegs.cpp create mode 100644 SrcShared/Hardware/EmRegs.h create mode 100644 SrcShared/Hardware/EmRegs328.cpp create mode 100644 SrcShared/Hardware/EmRegs328.h create mode 100644 SrcShared/Hardware/EmRegs328PalmIII.h create mode 100644 SrcShared/Hardware/EmRegs328PalmPilot.cpp create mode 100644 SrcShared/Hardware/EmRegs328PalmPilot.h create mode 100644 SrcShared/Hardware/EmRegs328PalmVII.h create mode 100644 SrcShared/Hardware/EmRegs328Pilot.h create mode 100644 SrcShared/Hardware/EmRegs328Prv.h create mode 100644 SrcShared/Hardware/EmRegs328Symbol1700.cpp create mode 100644 SrcShared/Hardware/EmRegs328Symbol1700.h create mode 100644 SrcShared/Hardware/EmRegsASICSymbol1700.cpp create mode 100644 SrcShared/Hardware/EmRegsASICSymbol1700.h create mode 100644 SrcShared/Hardware/EmRegsEZ.cpp create mode 100644 SrcShared/Hardware/EmRegsEZ.h create mode 100644 SrcShared/Hardware/EmRegsEZPalmIIIc.cpp create mode 100644 SrcShared/Hardware/EmRegsEZPalmIIIc.h create mode 100644 SrcShared/Hardware/EmRegsEZPalmIIIe.h create mode 100644 SrcShared/Hardware/EmRegsEZPalmIIIx.h create mode 100644 SrcShared/Hardware/EmRegsEZPalmM100.cpp create mode 100644 SrcShared/Hardware/EmRegsEZPalmM100.h create mode 100644 SrcShared/Hardware/EmRegsEZPalmV.cpp create mode 100644 SrcShared/Hardware/EmRegsEZPalmV.h create mode 100644 SrcShared/Hardware/EmRegsEZPalmVII.cpp create mode 100644 SrcShared/Hardware/EmRegsEZPalmVII.h create mode 100644 SrcShared/Hardware/EmRegsEZPalmVIIx.cpp create mode 100644 SrcShared/Hardware/EmRegsEZPalmVIIx.h create mode 100644 SrcShared/Hardware/EmRegsEZPalmVx.h create mode 100644 SrcShared/Hardware/EmRegsEZPrv.h create mode 100644 SrcShared/Hardware/EmRegsEZTRGpro.cpp create mode 100644 SrcShared/Hardware/EmRegsEZTRGpro.h create mode 100644 SrcShared/Hardware/EmRegsEZTemp.cpp create mode 100644 SrcShared/Hardware/EmRegsEZTemp.h create mode 100644 SrcShared/Hardware/EmRegsEZVisor.cpp create mode 100644 SrcShared/Hardware/EmRegsEZVisor.h create mode 100644 SrcShared/Hardware/EmRegsFrameBuffer.cpp create mode 100644 SrcShared/Hardware/EmRegsFrameBuffer.h create mode 100644 SrcShared/Hardware/EmRegsMediaQ11xx.cpp create mode 100644 SrcShared/Hardware/EmRegsMediaQ11xx.h create mode 100644 SrcShared/Hardware/EmRegsPLDPalmVIIEZ.cpp create mode 100644 SrcShared/Hardware/EmRegsPLDPalmVIIEZ.h create mode 100644 SrcShared/Hardware/EmRegsPrv.h create mode 100644 SrcShared/Hardware/EmRegsSED1375.cpp create mode 100644 SrcShared/Hardware/EmRegsSED1375.h create mode 100644 SrcShared/Hardware/EmRegsSED1376.cpp create mode 100644 SrcShared/Hardware/EmRegsSED1376.h create mode 100644 SrcShared/Hardware/EmRegsSZ.cpp create mode 100644 SrcShared/Hardware/EmRegsSZ.h create mode 100644 SrcShared/Hardware/EmRegsSZPrv.h create mode 100644 SrcShared/Hardware/EmRegsSZTemp.cpp create mode 100644 SrcShared/Hardware/EmRegsSZTemp.h create mode 100644 SrcShared/Hardware/EmRegsUSBPhilipsPDIUSBD12.cpp create mode 100644 SrcShared/Hardware/EmRegsUSBPhilipsPDIUSBD12.h create mode 100644 SrcShared/Hardware/EmRegsUSBVisor.cpp create mode 100644 SrcShared/Hardware/EmRegsUSBVisor.h create mode 100644 SrcShared/Hardware/EmRegsVZ.cpp create mode 100644 SrcShared/Hardware/EmRegsVZ.h create mode 100644 SrcShared/Hardware/EmRegsVZHandEra330.cpp create mode 100644 SrcShared/Hardware/EmRegsVZHandEra330.h create mode 100644 SrcShared/Hardware/EmRegsVZPalmM500.cpp create mode 100644 SrcShared/Hardware/EmRegsVZPalmM500.h create mode 100644 SrcShared/Hardware/EmRegsVZPalmM505.cpp create mode 100644 SrcShared/Hardware/EmRegsVZPalmM505.h create mode 100644 SrcShared/Hardware/EmRegsVZPrv.h create mode 100644 SrcShared/Hardware/EmRegsVZTemp.cpp create mode 100644 SrcShared/Hardware/EmRegsVZTemp.h create mode 100644 SrcShared/Hardware/EmRegsVZVisorEdge.cpp create mode 100644 SrcShared/Hardware/EmRegsVZVisorEdge.h create mode 100644 SrcShared/Hardware/EmRegsVZVisorPlatinum.cpp create mode 100644 SrcShared/Hardware/EmRegsVZVisorPlatinum.h create mode 100644 SrcShared/Hardware/EmRegsVZVisorPrism.cpp create mode 100644 SrcShared/Hardware/EmRegsVZVisorPrism.h create mode 100644 SrcShared/Hardware/EmSPISlave.cpp create mode 100644 SrcShared/Hardware/EmSPISlave.h create mode 100644 SrcShared/Hardware/EmSPISlaveADS784x.cpp create mode 100644 SrcShared/Hardware/EmSPISlaveADS784x.h create mode 100644 SrcShared/Hardware/EmUAEGlue.cpp create mode 100644 SrcShared/Hardware/EmUAEGlue.h create mode 100644 SrcShared/Hardware/EmUARTDragonball.cpp create mode 100644 SrcShared/Hardware/EmUARTDragonball.h create mode 100644 SrcShared/Hardware/TRG/EmHandEra330Defs.h create mode 100644 SrcShared/Hardware/TRG/EmHandEraCFBus.h create mode 100644 SrcShared/Hardware/TRG/EmHandEraSDBus.h create mode 100644 SrcShared/Hardware/TRG/EmRegs330CPLD.cpp create mode 100644 SrcShared/Hardware/TRG/EmRegs330CPLD.h create mode 100644 SrcShared/Hardware/TRG/EmSPISlave330Current.cpp create mode 100644 SrcShared/Hardware/TRG/EmSPISlave330Current.h create mode 100644 SrcShared/Hardware/TRG/EmTRG.cpp create mode 100644 SrcShared/Hardware/TRG/EmTRG.h create mode 100644 SrcShared/Hardware/TRG/EmTRGATA.cpp create mode 100644 SrcShared/Hardware/TRG/EmTRGATA.h create mode 100644 SrcShared/Hardware/TRG/EmTRGCF.cpp create mode 100644 SrcShared/Hardware/TRG/EmTRGCF.h create mode 100644 SrcShared/Hardware/TRG/EmTRGCFDefs.h create mode 100644 SrcShared/Hardware/TRG/EmTRGCFIO.cpp create mode 100644 SrcShared/Hardware/TRG/EmTRGCFIO.h create mode 100644 SrcShared/Hardware/TRG/EmTRGCFMem.cpp create mode 100644 SrcShared/Hardware/TRG/EmTRGCFMem.h create mode 100644 SrcShared/Hardware/TRG/EmTRGDiskIO.cpp create mode 100644 SrcShared/Hardware/TRG/EmTRGDiskIO.h create mode 100644 SrcShared/Hardware/TRG/EmTRGDiskType.cpp create mode 100644 SrcShared/Hardware/TRG/EmTRGDiskType.h create mode 100644 SrcShared/Hardware/TRG/EmTRGSD.cpp create mode 100644 SrcShared/Hardware/TRG/EmTRGSD.h create mode 100644 SrcShared/Hordes.cpp create mode 100644 SrcShared/Hordes.h create mode 100644 SrcShared/HostControl.cpp create mode 100644 SrcShared/HostControl.h create mode 100644 SrcShared/HostControlPrv.h create mode 100644 SrcShared/LoadApplication.cpp create mode 100644 SrcShared/LoadApplication.h create mode 100644 SrcShared/Logging.cpp create mode 100644 SrcShared/Logging.h create mode 100644 SrcShared/Marshal.cpp create mode 100644 SrcShared/Marshal.h create mode 100644 SrcShared/MetaMemory.cpp create mode 100644 SrcShared/MetaMemory.h create mode 100644 SrcShared/Miscellaneous.cpp create mode 100644 SrcShared/Miscellaneous.h create mode 100644 SrcShared/Palm.h create mode 100644 SrcShared/Palm/Device/328Jerry/IncsPrv/HardwareTD1.h create mode 100644 SrcShared/Palm/Device/EZAustin/IncsPrv/HardwareAustin.h create mode 100644 SrcShared/Palm/Device/EZAustin/IncsPrv/SED1375Hwr.h create mode 100644 SrcShared/Palm/Device/EZSumo/IncsPrv/HardwareEZ.h create mode 100644 SrcShared/Palm/Device/VZTrn/IncsPrv/HardwareVZ.h create mode 100644 SrcShared/Palm/Platform/Core/Hardware/IncsPrv/Hardware.h create mode 100644 SrcShared/Palm/Platform/Core/Hardware/IncsPrv/HwrROMToken.h create mode 100644 SrcShared/Palm/Platform/Core/Hardware/IncsPrv/M68328Hwr.h create mode 100644 SrcShared/Palm/Platform/Core/Hardware/IncsPrv/M68EZ328Hwr.h create mode 100644 SrcShared/Palm/Platform/Core/Hardware/IncsPrv/M68SZ328Hwr.h create mode 100644 SrcShared/Palm/Platform/Core/Hardware/IncsPrv/M68VZ328Hwr.h create mode 100644 SrcShared/Palm/Platform/Core/System/IncsPrv/DataPrv.h create mode 100644 SrcShared/Palm/Platform/Core/System/IncsPrv/DebugPrv.h create mode 100644 SrcShared/Palm/Platform/Core/System/IncsPrv/Globals.h create mode 100644 SrcShared/Palm/Platform/Core/System/IncsPrv/MemoryPrv.h create mode 100644 SrcShared/Palm/Platform/Core/System/IncsPrv/SerialLinkPrv.h create mode 100644 SrcShared/Palm/Platform/Core/System/IncsPrv/SysEvtPrv.h create mode 100644 SrcShared/Palm/Platform/Core/System/IncsPrv/SystemPrv.h create mode 100644 SrcShared/Palm/Platform/Core/System/Src/Crc.c create mode 100644 SrcShared/Palm/Platform/Incs/BuildDefaults.h create mode 100644 SrcShared/Palm/Platform/Incs/BuildDefines.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/CoreTraps.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/Hardware/HAL.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/Hardware/HwrMiscFlags.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/Hardware/M68KHwr.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/Bitmap.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/CharAttr.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/Chars.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/Crc.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/DLCommon.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/DLServer.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/DataMgr.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/DateTime.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/ErrorBase.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/FeatureMgr.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/Font.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/IntlMgr.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/KeyMgr.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/LocaleMgr.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/Localize.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/MemoryMgr.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/NetBitUtils.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/NetMgr.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/OverlayMgr.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/PalmLocale.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/PenMgr.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/Preferences.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/Rect.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/SerialLinkMgr.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/SerialMgr.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/SoundMgr.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/SysEvent.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/SysEvtMgr.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/SystemMgr.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/SystemPkt.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/SystemResources.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/TextMgr.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/System/Window.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/UI/AttentionMgr.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/UI/Control.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/UI/Event.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/UI/FatalAlert.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/UI/Field.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/UI/Find.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/UI/Form.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/UI/InsPoint.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/UI/List.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/UI/ScrollBar.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/UI/Table.h create mode 100644 SrcShared/Palm/Platform/Incs/Core/UI/UIResources.h create mode 100644 SrcShared/Palm/Platform/Incs/Libraries/LibTraps.h create mode 100644 SrcShared/Palm/Platform/Incs/PalmTypes.h create mode 100644 SrcShared/PalmOptErrorCheckLevel.h create mode 100644 SrcShared/PalmPack.h create mode 100644 SrcShared/PalmPackPop.h create mode 100644 SrcShared/Patches/EmPatchIf.h create mode 100644 SrcShared/Patches/EmPatchLoader.cpp create mode 100644 SrcShared/Patches/EmPatchLoader.h create mode 100644 SrcShared/Patches/EmPatchMgr.cpp create mode 100644 SrcShared/Patches/EmPatchMgr.h create mode 100644 SrcShared/Patches/EmPatchModule.cpp create mode 100644 SrcShared/Patches/EmPatchModule.h create mode 100644 SrcShared/Patches/EmPatchModuleHtal.cpp create mode 100644 SrcShared/Patches/EmPatchModuleHtal.h create mode 100644 SrcShared/Patches/EmPatchModuleMap.cpp create mode 100644 SrcShared/Patches/EmPatchModuleMap.h create mode 100644 SrcShared/Patches/EmPatchModuleMemMgr.cpp create mode 100644 SrcShared/Patches/EmPatchModuleNetLib.cpp create mode 100644 SrcShared/Patches/EmPatchModuleNetLib.h create mode 100644 SrcShared/Patches/EmPatchModuleSys.cpp create mode 100644 SrcShared/Patches/EmPatchModuleSys.h create mode 100644 SrcShared/Patches/EmPatchModuleTypes.h create mode 100644 SrcShared/Patches/EmPatchState.cpp create mode 100644 SrcShared/Patches/EmPatchState.h create mode 100644 SrcShared/Platform.h create mode 100644 SrcShared/Platform_NetLib.h create mode 100644 SrcShared/Platform_NetLib_Sck.cpp create mode 100644 SrcShared/PreferenceMgr.cpp create mode 100644 SrcShared/PreferenceMgr.h create mode 100644 SrcShared/Profiling.cpp create mode 100644 SrcShared/Profiling.h create mode 100644 SrcShared/ROMStubs.cpp create mode 100644 SrcShared/ROMStubs.h create mode 100644 SrcShared/SLP.cpp create mode 100644 SrcShared/SLP.h create mode 100644 SrcShared/SessionFile.cpp create mode 100644 SrcShared/SessionFile.h create mode 100644 SrcShared/Skins.cpp create mode 100644 SrcShared/Skins.h create mode 100644 SrcShared/SocketMessaging.cpp create mode 100644 SrcShared/SocketMessaging.h create mode 100644 SrcShared/Startup.cpp create mode 100644 SrcShared/Startup.h create mode 100644 SrcShared/String2 create mode 100644 SrcShared/StringConversions.cpp create mode 100644 SrcShared/StringConversions.h create mode 100644 SrcShared/StringData.cpp create mode 100644 SrcShared/StringData.h create mode 100644 SrcShared/Strings.r.h create mode 100644 SrcShared/Strings.txt create mode 100644 SrcShared/Switches.h create mode 100644 SrcShared/SystemPacket.cpp create mode 100644 SrcShared/SystemPacket.h create mode 100644 SrcShared/TracerCommon.cpp create mode 100644 SrcShared/TracerCommon.h create mode 100644 SrcShared/TracerPlatform.h create mode 100644 SrcShared/UAE/UAE.h create mode 100644 SrcShared/UAE/build68k.c create mode 100644 SrcShared/UAE/compiler.h create mode 100644 SrcShared/UAE/config.h create mode 100644 SrcShared/UAE/cpudefs.c create mode 100644 SrcShared/UAE/cpuemu.c create mode 100644 SrcShared/UAE/cpuemu1.c create mode 100644 SrcShared/UAE/cpuemu2.c create mode 100644 SrcShared/UAE/cpuemu3.c create mode 100644 SrcShared/UAE/cpuemu4.c create mode 100644 SrcShared/UAE/cpuemu5.c create mode 100644 SrcShared/UAE/cpuemu6.c create mode 100644 SrcShared/UAE/cpuemu7.c create mode 100644 SrcShared/UAE/cpuemu8.c create mode 100644 SrcShared/UAE/cpustbl.c create mode 100644 SrcShared/UAE/cputbl.h create mode 100644 SrcShared/UAE/custom.h create mode 100644 SrcShared/UAE/gencpu.c create mode 100644 SrcShared/UAE/machdep_m68k.h create mode 100644 SrcShared/UAE/machdep_maccess.h create mode 100644 SrcShared/UAE/memory_cpu.h create mode 100644 SrcShared/UAE/missing.c create mode 100644 SrcShared/UAE/newcpu.h create mode 100644 SrcShared/UAE/options.h create mode 100644 SrcShared/UAE/readcpu.cpp create mode 100644 SrcShared/UAE/readcpu.h create mode 100644 SrcShared/UAE/sysconfig.h create mode 100644 SrcShared/UAE/sysdeps.h create mode 100644 SrcShared/UAE/table68k create mode 100644 SrcShared/UAE/target.h create mode 100644 SrcShared/jpeg/cderror.h create mode 100644 SrcShared/jpeg/jcapimin.c create mode 100644 SrcShared/jpeg/jcapistd.c create mode 100644 SrcShared/jpeg/jccoefct.c create mode 100644 SrcShared/jpeg/jccolor.c create mode 100644 SrcShared/jpeg/jcdctmgr.c create mode 100644 SrcShared/jpeg/jchuff.c create mode 100644 SrcShared/jpeg/jchuff.h create mode 100644 SrcShared/jpeg/jcinit.c create mode 100644 SrcShared/jpeg/jcmainct.c create mode 100644 SrcShared/jpeg/jcmarker.c create mode 100644 SrcShared/jpeg/jcmaster.c create mode 100644 SrcShared/jpeg/jcomapi.c create mode 100644 SrcShared/jpeg/jcparam.c create mode 100644 SrcShared/jpeg/jcphuff.c create mode 100644 SrcShared/jpeg/jcprepct.c create mode 100644 SrcShared/jpeg/jcsample.c create mode 100644 SrcShared/jpeg/jctrans.c create mode 100644 SrcShared/jpeg/jdapimin.c create mode 100644 SrcShared/jpeg/jdapistd.c create mode 100644 SrcShared/jpeg/jdatadst.c create mode 100644 SrcShared/jpeg/jdatasrc.c create mode 100644 SrcShared/jpeg/jdcoefct.c create mode 100644 SrcShared/jpeg/jdcolor.c create mode 100644 SrcShared/jpeg/jdct.h create mode 100644 SrcShared/jpeg/jddctmgr.c create mode 100644 SrcShared/jpeg/jdhuff.c create mode 100644 SrcShared/jpeg/jdhuff.h create mode 100644 SrcShared/jpeg/jdinput.c create mode 100644 SrcShared/jpeg/jdmainct.c create mode 100644 SrcShared/jpeg/jdmarker.c create mode 100644 SrcShared/jpeg/jdmaster.c create mode 100644 SrcShared/jpeg/jdmerge.c create mode 100644 SrcShared/jpeg/jdphuff.c create mode 100644 SrcShared/jpeg/jdpostct.c create mode 100644 SrcShared/jpeg/jdsample.c create mode 100644 SrcShared/jpeg/jdtrans.c create mode 100644 SrcShared/jpeg/jerror.c create mode 100644 SrcShared/jpeg/jerror.h create mode 100644 SrcShared/jpeg/jfdctflt.c create mode 100644 SrcShared/jpeg/jfdctfst.c create mode 100644 SrcShared/jpeg/jfdctint.c create mode 100644 SrcShared/jpeg/jidctflt.c create mode 100644 SrcShared/jpeg/jidctfst.c create mode 100644 SrcShared/jpeg/jidctint.c create mode 100644 SrcShared/jpeg/jidctred.c create mode 100644 SrcShared/jpeg/jinclude.h create mode 100644 SrcShared/jpeg/jmemmac.c create mode 100644 SrcShared/jpeg/jmemmgr.c create mode 100644 SrcShared/jpeg/jmemnobs.c create mode 100644 SrcShared/jpeg/jmemsys.h create mode 100644 SrcShared/jpeg/jmorecfg.h create mode 100644 SrcShared/jpeg/jpegint.h create mode 100644 SrcShared/jpeg/jpeglib.h create mode 100644 SrcShared/jpeg/jquant1.c create mode 100644 SrcShared/jpeg/jquant2.c create mode 100644 SrcShared/jpeg/jutils.c create mode 100644 SrcShared/jpeg/jversion.h create mode 100644 SrcShared/omnithread/mach.cpp create mode 100644 SrcShared/omnithread/mach.h create mode 100644 SrcShared/omnithread/nt.cpp create mode 100644 SrcShared/omnithread/nt.h create mode 100644 SrcShared/omnithread/null_thread.cpp create mode 100644 SrcShared/omnithread/null_thread.h create mode 100644 SrcShared/omnithread/omnithread.h create mode 100644 SrcShared/omnithread/posix.cpp create mode 100644 SrcShared/omnithread/posix.h create mode 100644 SrcShared/omnithread/solaris.cpp create mode 100644 SrcShared/omnithread/solaris.h create mode 100644 SrcShared/xstring2 create mode 100644 SrcUnix/DefaultLarge.xpm create mode 100644 SrcUnix/DefaultSmall.xpm create mode 100644 SrcUnix/EmApplicationFltk.cpp create mode 100644 SrcUnix/EmApplicationFltk.h create mode 100644 SrcUnix/EmCommonUnix.h create mode 100644 SrcUnix/EmDirRefUnix.cpp create mode 100644 SrcUnix/EmDirRefUnix.h create mode 100644 SrcUnix/EmDlgFltk.cpp create mode 100644 SrcUnix/EmDlgFltk.h create mode 100644 SrcUnix/EmDlgFltkFactory.fl create mode 100644 SrcUnix/EmDocumentUnix.cpp create mode 100644 SrcUnix/EmDocumentUnix.h create mode 100644 SrcUnix/EmFileRefUnix.cpp create mode 100644 SrcUnix/EmFileRefUnix.h create mode 100644 SrcUnix/EmMenusFltk.cpp create mode 100644 SrcUnix/EmMenusFltk.h create mode 100644 SrcUnix/EmPixMapUnix.cpp create mode 100644 SrcUnix/EmPixMapUnix.h create mode 100644 SrcUnix/EmTransportSerialUnix.cpp create mode 100644 SrcUnix/EmTransportSerialUnix.h create mode 100644 SrcUnix/EmTransportUSBUnix.cpp create mode 100644 SrcUnix/EmTransportUSBUnix.h create mode 100644 SrcUnix/EmWindowFltk.cpp create mode 100644 SrcUnix/EmWindowFltk.h create mode 100644 SrcUnix/Platform_Unix.cpp create mode 100644 SrcUnix/ResStrings.h create mode 100644 SrcUnix/espws-2.0/CheckButton.cxx create mode 100644 SrcUnix/espws-2.0/CheckButton.h create mode 100644 SrcUnix/espws-2.0/CheckButton.html create mode 100644 SrcUnix/espws-2.0/FileBrowser.cxx create mode 100644 SrcUnix/espws-2.0/FileBrowser.h create mode 100644 SrcUnix/espws-2.0/FileBrowser.html create mode 100644 SrcUnix/espws-2.0/FileChooser.cxx create mode 100644 SrcUnix/espws-2.0/FileChooser.fl create mode 100644 SrcUnix/espws-2.0/FileChooser.gif create mode 100644 SrcUnix/espws-2.0/FileChooser.h create mode 100644 SrcUnix/espws-2.0/FileChooser.html create mode 100644 SrcUnix/espws-2.0/FileChooser2.cxx create mode 100644 SrcUnix/espws-2.0/FileIcon.cxx create mode 100644 SrcUnix/espws-2.0/FileIcon.h create mode 100644 SrcUnix/espws-2.0/FileIcon.html create mode 100644 SrcUnix/espws-2.0/FileInput.cxx create mode 100644 SrcUnix/espws-2.0/FileInput.h create mode 100644 SrcUnix/espws-2.0/FileInput.html create mode 100644 SrcUnix/espws-2.0/Fl_Wizard.cxx create mode 100644 SrcUnix/espws-2.0/Fl_Wizard.h create mode 100644 SrcUnix/espws-2.0/Fl_Wizard.html create mode 100644 SrcUnix/espws-2.0/HelpApp.cxx create mode 100644 SrcUnix/espws-2.0/HelpApp.fl create mode 100644 SrcUnix/espws-2.0/HelpApp.gif create mode 100644 SrcUnix/espws-2.0/HelpApp.h create mode 100644 SrcUnix/espws-2.0/HelpApp2.cxx create mode 100644 SrcUnix/espws-2.0/HelpDialog.cxx create mode 100644 SrcUnix/espws-2.0/HelpDialog.fl create mode 100644 SrcUnix/espws-2.0/HelpDialog.gif create mode 100644 SrcUnix/espws-2.0/HelpDialog.h create mode 100644 SrcUnix/espws-2.0/HelpDialog.html create mode 100644 SrcUnix/espws-2.0/HelpView.cxx create mode 100644 SrcUnix/espws-2.0/HelpView.h create mode 100644 SrcUnix/espws-2.0/HelpView.html create mode 100644 SrcUnix/espws-2.0/Makefile.in create mode 100644 SrcUnix/espws-2.0/allfiles.xbm create mode 100755 SrcUnix/espws-2.0/configure create mode 100644 SrcUnix/espws-2.0/configure.in create mode 100644 SrcUnix/espws-2.0/documentation.html create mode 100644 SrcUnix/espws-2.0/download.html create mode 100644 SrcUnix/espws-2.0/espws.book create mode 100644 SrcUnix/espws-2.0/espws.pdf create mode 100644 SrcUnix/espws-2.0/file.html create mode 100644 SrcUnix/espws-2.0/flsurf.cxx create mode 100644 SrcUnix/espws-2.0/flsurf.gif create mode 100644 SrcUnix/espws-2.0/flsurf.html create mode 100644 SrcUnix/espws-2.0/fltk.css create mode 100644 SrcUnix/espws-2.0/help.html create mode 100644 SrcUnix/espws-2.0/home.xbm create mode 100644 SrcUnix/espws-2.0/index.html create mode 100644 SrcUnix/espws-2.0/intro.html create mode 100644 SrcUnix/espws-2.0/navbar.gif create mode 100644 SrcUnix/espws-2.0/new.xbm create mode 100644 SrcUnix/espws-2.0/next.xbm create mode 100644 SrcUnix/espws-2.0/prev.xbm create mode 100644 SrcUnix/espws-2.0/relnotes.html create mode 100644 SrcUnix/espws-2.0/reload.xbm create mode 100644 SrcUnix/espws-2.0/reset.xbm create mode 100644 SrcUnix/espws-2.0/stop.xbm create mode 100644 SrcUnix/espws-2.0/testfile.cxx create mode 100644 SrcUnix/espws-2.0/testhelp.cxx create mode 100644 SrcUnix/espws-2.0/up.xbm create mode 100644 SrcUnix/espws-2.0/widgets.html create mode 100644 SrcUnix/espws.diff create mode 100644 SrcUnix/jconfig.h create mode 100644 SrcUnix/poser.xpm create mode 100644 Tools/Strings2Resource.pl create mode 100755 Tools/s2r.sh diff --git a/BuildUnix/Gzip/Makefile.am b/BuildUnix/Gzip/Makefile.am new file mode 100644 index 0000000..ca9c89d --- /dev/null +++ b/BuildUnix/Gzip/Makefile.am @@ -0,0 +1,34 @@ +## ====================================================================================== +## Copyright (c) 1999-2001 Palm, Inc. or its subsidiaries. +## All rights reserved. +## ====================================================================================== + +## +## makefile.am for poser-specific gzip code +## +SUFFIXES = .cpp + +VPATH = $(srcdir)/../../SrcShared/Gzip: + +## no subdir specific flags needed -- just go with globals +LOCAL_CFLAGS = + +CFLAGS = $(POSER_CFLAGS) $(LOCAL_CFLAGS) +CXXFLAGS = $(POSER_CXXFLAGS) $(LOCAL_CFLAGS) + +INCLUDES = -I$(srcdir)/../../SrcShared/Gzip + +noinst_LIBRARIES = libposergzip.a + +SRC_GZIP = bits.c \ + crypt.h \ + deflate.c \ + gzip.h \ + inflate.c \ + lzw.h \ + revision.h \ + tailor.h \ + trees.c \ + util.c + +libposergzip_a_SOURCES = $(SRC_GZIP) diff --git a/BuildUnix/Gzip/Makefile.in b/BuildUnix/Gzip/Makefile.in new file mode 100644 index 0000000..8ea21bb --- /dev/null +++ b/BuildUnix/Gzip/Makefile.in @@ -0,0 +1,325 @@ +# Makefile.in generated automatically by automake 1.4a from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_FLAG = +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_alias = @build_alias@ +build_triplet = @build@ +host_alias = @host_alias@ +host_triplet = @host@ +target_alias = @target_alias@ +target_triplet = @target@ +AR = @AR@ +CC = @CC@ +CPP = @CPP@ +CXX = @CXX@ +GLLIB = @GLLIB@ +MAKEINFO = @MAKEINFO@ +PACKAGE = @PACKAGE@ +POSER_CFLAGS = @POSER_CFLAGS@ +POSER_CXXFLAGS = @POSER_CXXFLAGS@ +RANLIB = @RANLIB@ +THREAD_FLAGS = @THREAD_FLAGS@ +THREAD_LIBS = @THREAD_LIBS@ +THREAD_SRC = @THREAD_SRC@ +VERSION = @VERSION@ + +SUFFIXES = .cpp + +VPATH = $(srcdir)/../../SrcShared/Gzip: + +LOCAL_CFLAGS = + +CFLAGS = $(POSER_CFLAGS) $(LOCAL_CFLAGS) +CXXFLAGS = $(POSER_CXXFLAGS) $(LOCAL_CFLAGS) + +INCLUDES = -I$(srcdir)/../../SrcShared/Gzip + +noinst_LIBRARIES = libposergzip.a + +SRC_GZIP = bits.c crypt.h deflate.c gzip.h inflate.c lzw.h revision.h tailor.h trees.c util.c + + +libposergzip_a_SOURCES = $(SRC_GZIP) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_CLEAN_FILES = +LIBRARIES = $(noinst_LIBRARIES) + + +DEFS = @DEFS@ -I. -I$(srcdir) +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +X_CFLAGS = @X_CFLAGS@ +X_LIBS = @X_LIBS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +libposergzip_a_LIBADD = +libposergzip_a_OBJECTS = bits.o deflate.o inflate.o trees.o util.o +COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ +DIST_COMMON = Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = gtar +GZIP_ENV = --best +DEP_FILES = .deps/bits.P .deps/deflate.P .deps/inflate.P .deps/trees.P \ +.deps/util.P +SOURCES = $(libposergzip_a_SOURCES) +OBJECTS = $(libposergzip_a_OBJECTS) + +all: all-redirect +.SUFFIXES: +.SUFFIXES: .S .c .cpp .o .s +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --foreign Gzip/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +mostlyclean-noinstLIBRARIES: + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) + +distclean-noinstLIBRARIES: + +maintainer-clean-noinstLIBRARIES: + +.s.o: + $(COMPILE) -c $< + +.S.o: + $(COMPILE) -c $< + +mostlyclean-compile: + -rm -f *.o core *.core + +clean-compile: + +distclean-compile: + -rm -f *.tab.c + +maintainer-clean-compile: + +libposergzip.a: $(libposergzip_a_OBJECTS) $(libposergzip_a_DEPENDENCIES) + -rm -f libposergzip.a + $(AR) cru libposergzip.a $(libposergzip_a_OBJECTS) $(libposergzip_a_LIBADD) + $(RANLIB) libposergzip.a + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = Gzip + +distdir: $(DISTFILES) + here=`cd $(top_builddir) && pwd`; \ + top_distdir=`cd $(top_distdir) && pwd`; \ + distdir=`cd $(distdir) && pwd`; \ + cd $(top_srcdir) \ + && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Gzip/Makefile + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$d/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done + +DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) + +-include $(DEP_FILES) + +mostlyclean-depend: + +clean-depend: + +distclean-depend: + -rm -rf .deps + +maintainer-clean-depend: + +%.o: %.c + @echo '$(COMPILE) -c $<'; \ + $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-cp .deps/$(*F).pp .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm .deps/$(*F).pp + +%.lo: %.c + @echo '$(LTCOMPILE) -c $<'; \ + $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ + < .deps/$(*F).pp > .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm -f .deps/$(*F).pp +info-am: +info: info-am +dvi-am: +dvi: dvi-am +check-am: all-am +check: check-am +installcheck-am: +installcheck: installcheck-am +install-exec-am: +install-exec: install-exec-am + +install-data-am: +install-data: install-data-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-am +uninstall-am: +uninstall: uninstall-am +all-am: Makefile $(LIBRARIES) +all-redirect: all-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install +installdirs: + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-noinstLIBRARIES mostlyclean-compile \ + mostlyclean-tags mostlyclean-depend mostlyclean-generic + +mostlyclean: mostlyclean-am + +clean-am: clean-noinstLIBRARIES clean-compile clean-tags clean-depend \ + clean-generic mostlyclean-am + +clean: clean-am + +distclean-am: distclean-noinstLIBRARIES distclean-compile \ + distclean-tags distclean-depend distclean-generic \ + clean-am + +distclean: distclean-am + +maintainer-clean-am: maintainer-clean-noinstLIBRARIES \ + maintainer-clean-compile maintainer-clean-tags \ + maintainer-clean-depend maintainer-clean-generic \ + distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-am + +.PHONY: mostlyclean-noinstLIBRARIES distclean-noinstLIBRARIES \ +clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \ +mostlyclean-compile distclean-compile clean-compile \ +maintainer-clean-compile tags mostlyclean-tags distclean-tags \ +clean-tags maintainer-clean-tags distdir mostlyclean-depend \ +distclean-depend clean-depend maintainer-clean-depend info-am info \ +dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ +install-exec install-data-am install-data install-am install \ +uninstall-am uninstall all-redirect all-am all installdirs \ +mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/BuildUnix/Makefile.am b/BuildUnix/Makefile.am new file mode 100644 index 0000000..6ec3173 --- /dev/null +++ b/BuildUnix/Makefile.am @@ -0,0 +1,429 @@ +## -*- mode: Makefile; tab-width: 4; -*- +## ====================================================================================== +## Copyright (c) 1998-2001 Palm, Inc. or its subsidiaries. +## All rights reserved. +## ====================================================================================== + +SUBDIRS = Gzip jpeg espws-2.0 + +SUFFIXES = .cpp + +VPATH = $(srcdir)/../SrcUnix: \ + $(srcdir)/../SrcShared: \ + $(srcdir)/../SrcShared/Hardware: \ + $(srcdir)/../SrcShared/Hardware/TRG: \ + $(srcdir)/../SrcShared/omnithread: \ + $(srcdir)/../SrcShared/Palm/Platform/Core/System/Src: \ + $(srcdir)/../SrcShared/Patches: \ + $(srcdir)/../SrcShared/UAE: + + +## POSER_CFLAGS and POSER_CXXFLAGS defined by configure.in. + +CFLAGS = $(POSER_CFLAGS) $(LOCAL_CFLAGS) $(FLAGS) $(THREAD_FLAGS) $(X_CFLAGS) +CXXFLAGS = $(POSER_CXXFLAGS) $(LOCAL_CFLAGS) $(FLAGS) $(THREAD_FLAGS) $(X_CFLAGS) + +INCLUDES = -I$(srcdir)/../SrcShared +INCLUDES += -I$(srcdir)/../SrcShared/Hardware +INCLUDES += -I$(srcdir)/../SrcShared/Hardware/TRG +INCLUDES += -I$(srcdir)/../SrcShared/Palm/Device +INCLUDES += -I$(srcdir)/../SrcShared/Palm/Platform +INCLUDES += -I$(srcdir)/../SrcShared/Palm/Platform/Core/Hardware/IncsPrv +INCLUDES += -I$(srcdir)/../SrcShared/Palm/Platform/Core/System/IncsPrv +INCLUDES += -I$(srcdir)/../SrcShared/Palm/Platform/Incs +INCLUDES += -I$(srcdir)/../SrcShared/Palm/Platform/Incs/Core +INCLUDES += -I$(srcdir)/../SrcShared/Palm/Platform/Incs/Core/Hardware +INCLUDES += -I$(srcdir)/../SrcShared/Palm/Platform/Incs/Core/System +INCLUDES += -I$(srcdir)/../SrcShared/Palm/Platform/Incs/Core/UI +INCLUDES += -I$(srcdir)/../SrcShared/Palm/Platform/Incs/Libraries +INCLUDES += -I$(srcdir)/../SrcShared/Gzip +INCLUDES += -I$(srcdir)/../SrcShared/jpeg +INCLUDES += -I$(srcdir)/../SrcShared/omnithread +INCLUDES += -I$(srcdir)/../SrcShared/Patches +INCLUDES += -I$(srcdir)/../SrcShared/UAE +INCLUDES += -I$(srcdir)/../SrcUnix +INCLUDES += -I$(srcdir)/../SrcUnix/espws-2.0 + +SRC_UNIX = EmApplicationFltk.cpp \ + EmApplicationFltk.h \ + EmCommonUnix.h \ + EmDirRefUnix.cpp \ + EmDirRefUnix.h \ + EmDlgFltk.cpp \ + EmDlgFltk.h \ + EmDocumentUnix.cpp \ + EmDocumentUnix.h \ + EmFileRefUnix.cpp \ + EmFileRefUnix.h \ + EmMenusFltk.cpp \ + EmMenusFltk.h \ + EmPixMapUnix.cpp \ + EmPixMapUnix.h \ + EmTransportSerialUnix.cpp \ + EmTransportSerialUnix.h \ + EmTransportUSBUnix.cpp \ + EmTransportUSBUnix.h \ + EmWindowFltk.cpp \ + EmWindowFltk.h \ + Platform_Unix.cpp \ + jconfig.h + +SRC_UNIX_GEN = ResStrings.cpp \ + EmDlgFltkFactory.h \ + EmDlgFltkFactory.cpp + +SRC_SHARED = ATraps.cpp \ + ATraps.h \ + Byteswapping.cpp \ + Byteswapping.h \ + CGremlins.cpp \ + CGremlins.h \ + CGremlinsStubs.cpp \ + CGremlinsStubs.h \ + ChunkFile.cpp \ + ChunkFile.h \ + DebugMgr.cpp \ + DebugMgr.h \ + EcmIf.h \ + EcmObject.h \ + EmAction.cpp \ + EmAction.h \ + EmApplication.cpp \ + EmApplication.h \ + EmCommands.h \ + EmCommon.cpp \ + EmCommon.h \ + EmDevice.cpp \ + EmDevice.h \ + EmDirRef.cpp \ + EmDirRef.h \ + EmDlg.cpp \ + EmDlg.h \ + EmDocument.cpp \ + EmDocument.h \ + EmErrCodes.h \ + EmEventOutput.cpp \ + EmEventOutput.h \ + EmEventPlayback.cpp \ + EmEventPlayback.h \ + EmException.cpp \ + EmException.h \ + EmExgMgr.cpp \ + EmExgMgr.h \ + EmFileImport.cpp \ + EmFileImport.h \ + EmFileRef.cpp \ + EmFileRef.h \ + EmJPEG.cpp \ + EmJPEG.h \ + EmLowMem.cpp \ + EmLowMem.h \ + EmMapFile.cpp \ + EmMapFile.h \ + EmMenus.cpp \ + EmMenus.h \ + EmMinimize.cpp \ + EmMinimize.h \ + EmPalmFunction.cpp \ + EmPalmFunction.h \ + EmPalmHeap.cpp \ + EmPalmHeap.h \ + EmPalmOS.cpp \ + EmPalmOS.h \ + EmPalmStructs.cpp \ + EmPalmStructs.h \ + EmPalmStructs.i \ + EmPixMap.cpp \ + EmPixMap.h \ + EmPoint.cpp \ + EmPoint.h \ + EmQuantizer.cpp \ + EmQuantizer.h \ + EmRect.cpp \ + EmRect.h \ + EmRefCounted.cpp \ + EmRefCounted.h \ + EmRegion.cpp \ + EmRegion.h \ + EmROMReader.cpp \ + EmROMReader.h \ + EmROMTransfer.cpp \ + EmROMTransfer.h \ + EmRPC.cpp \ + EmRPC.h \ + EmScreen.cpp \ + EmScreen.h \ + EmSession.cpp \ + EmSession.h \ + EmStream.cpp \ + EmStream.h \ + EmStreamFile.cpp \ + EmStreamFile.h \ + EmStructs.h \ + EmSubroutine.cpp \ + EmSubroutine.h \ + EmThreadSafeQueue.cpp \ + EmThreadSafeQueue.h \ + EmTransport.cpp \ + EmTransport.h \ + EmTransportSerial.cpp \ + EmTransportSerial.h \ + EmTransportSocket.cpp \ + EmTransportSocket.h \ + EmTransportUSB.cpp \ + EmTransportUSB.h \ + EmTypes.h \ + EmWindow.cpp \ + EmWindow.h \ + ErrorHandling.cpp \ + ErrorHandling.h \ + Hordes.cpp \ + Hordes.h \ + HostControl.cpp \ + HostControl.h \ + HostControlPrv.h \ + LoadApplication.cpp \ + LoadApplication.h \ + Logging.cpp \ + Logging.h \ + Marshal.cpp \ + Marshal.h \ + MetaMemory.cpp \ + MetaMemory.h \ + Miscellaneous.cpp \ + Miscellaneous.h \ + Palm.h \ + PalmOptErrorCheckLevel.h \ + PalmPack.h \ + PalmPackPop.h \ + Platform.h \ + Platform_NetLib.h \ + Platform_NetLib_Sck.cpp \ + PreferenceMgr.cpp \ + PreferenceMgr.h \ + Profiling.cpp \ + Profiling.h \ + ROMStubs.cpp \ + ROMStubs.h \ + SLP.cpp \ + SLP.h \ + SessionFile.cpp \ + SessionFile.h \ + Skins.cpp \ + Skins.h \ + SocketMessaging.cpp \ + SocketMessaging.h \ + Startup.cpp \ + Startup.h \ + StringConversions.cpp \ + StringConversions.h \ + StringData.cpp \ + StringData.h \ + SystemPacket.cpp \ + SystemPacket.h + + +SRC_SHARED_HARDWARE = \ + EmBankDRAM.cpp \ + EmBankDRAM.h \ + EmBankDummy.cpp \ + EmBankDummy.h \ + EmBankMapped.cpp \ + EmBankMapped.h \ + EmBankROM.cpp \ + EmBankROM.h \ + EmBankRegs.cpp \ + EmBankRegs.h \ + EmBankSRAM.cpp \ + EmBankSRAM.h \ + EmCPU.cpp \ + EmCPU.h \ + EmCPU68K.cpp \ + EmCPU68K.h \ + EmCPUARM.cpp \ + EmCPUARM.h \ + EmHAL.cpp \ + EmHAL.h \ + EmMemory.cpp \ + EmMemory.h \ + EmRegs.cpp \ + EmRegs.h \ + EmRegs328.cpp \ + EmRegs328.h \ + EmRegs328PalmIII.h \ + EmRegs328PalmPilot.cpp \ + EmRegs328PalmPilot.h \ + EmRegs328PalmVII.h \ + EmRegs328Pilot.h \ + EmRegs328Prv.h \ + EmRegs328Symbol1700.cpp \ + EmRegs328Symbol1700.h \ + EmRegsASICSymbol1700.cpp \ + EmRegsASICSymbol1700.h \ + EmRegsEZ.cpp \ + EmRegsEZ.h \ + EmRegsEZPalmIIIc.cpp \ + EmRegsEZPalmIIIc.h \ + EmRegsEZPalmIIIe.h \ + EmRegsEZPalmIIIx.h \ + EmRegsEZPalmM100.cpp \ + EmRegsEZPalmM100.h \ + EmRegsEZPalmV.cpp \ + EmRegsEZPalmV.h \ + EmRegsEZPalmVIIx.cpp \ + EmRegsEZPalmVIIx.h \ + EmRegsEZPalmVII.cpp \ + EmRegsEZPalmVII.h \ + EmRegsEZPalmVx.h \ + EmRegsEZPrv.h \ + EmRegsEZTemp.cpp \ + EmRegsEZTemp.h \ + EmRegsEZTRGpro.cpp \ + EmRegsEZTRGpro.h \ + EmRegsEZVisor.cpp \ + EmRegsEZVisor.h \ + EmRegsFrameBuffer.cpp \ + EmRegsFrameBuffer.h \ + EmRegsMediaQ11xx.cpp \ + EmRegsMediaQ11xx.h \ + EmRegsPLDPalmVIIEZ.cpp \ + EmRegsPLDPalmVIIEZ.h \ + EmRegsPrv.h \ + EmRegsSED1375.cpp \ + EmRegsSED1375.h \ + EmRegsSED1376.cpp \ + EmRegsSED1376.h \ + EmRegsSZ.cpp \ + EmRegsSZ.h \ + EmRegsSZPrv.h \ + EmRegsSZTemp.cpp \ + EmRegsSZTemp.h \ + EmRegsUSBPhilipsPDIUSBD12.cpp \ + EmRegsUSBPhilipsPDIUSBD12.h \ + EmRegsUSBVisor.cpp \ + EmRegsUSBVisor.h \ + EmRegsVZ.cpp \ + EmRegsVZ.h \ + EmRegsVZHandEra330.cpp \ + EmRegsVZHandEra330.h \ + EmRegsVZPalmM500.cpp \ + EmRegsVZPalmM500.h \ + EmRegsVZPalmM505.cpp \ + EmRegsVZPalmM505.h \ + EmRegsVZPrv.h \ + EmRegsVZTemp.cpp \ + EmRegsVZTemp.h \ + EmRegsVZVisorEdge.cpp \ + EmRegsVZVisorEdge.h \ + EmRegsVZVisorPlatinum.cpp \ + EmRegsVZVisorPlatinum.h \ + EmRegsVZVisorPrism.cpp \ + EmRegsVZVisorPrism.h \ + EmSPISlave.cpp \ + EmSPISlave.h \ + EmSPISlaveADS784x.cpp \ + EmSPISlaveADS784x.h \ + EmUAEGlue.cpp \ + EmUAEGlue.h \ + EmUARTDragonball.cpp \ + EmUARTDragonball.h + +SRC_PATCHES = EmPatchIf.h \ + EmPatchLoader.cpp \ + EmPatchLoader.h \ + EmPatchMgr.cpp \ + EmPatchMgr.h \ + EmPatchModule.cpp \ + EmPatchModule.h \ + EmPatchModuleHtal.cpp \ + EmPatchModuleHtal.h \ + EmPatchModuleMap.cpp \ + EmPatchModuleMap.h \ + EmPatchModuleMemMgr.cpp \ + EmPatchModuleNetLib.cpp \ + EmPatchModuleNetLib.h \ + EmPatchModuleSys.cpp \ + EmPatchModuleSys.h \ + EmPatchModuleTypes.h \ + EmPatchState.cpp \ + EmPatchState.h + +SRC_TRG = EmHandEra330Defs.h \ + EmHandEraCFBus.h \ + EmHandEraSDBus.h \ + EmRegs330CPLD.cpp \ + EmRegs330CPLD.h \ + EmSPISlave330Current.cpp \ + EmSPISlave330Current.h \ + EmTRG.cpp \ + EmTRG.h \ + EmTRGATA.cpp \ + EmTRGATA.h \ + EmTRGCF.cpp \ + EmTRGCF.h \ + EmTRGCFDefs.h \ + EmTRGCFIO.cpp \ + EmTRGCFIO.h \ + EmTRGCFMem.cpp \ + EmTRGCFMem.h \ + EmTRGDiskIO.cpp \ + EmTRGDiskIO.h \ + EmTRGDiskType.cpp \ + EmTRGDiskType.h \ + EmTRGSD.cpp \ + EmTRGSD.h + +SRC_UAE = UAE.h \ + compiler.h \ + config.h \ + cpudefs.c \ + cpuemu.c \ + cpustbl.c \ + cputbl.h \ + custom.h \ + machdep_m68k.h \ + machdep_maccess.h \ + memory_cpu.h \ + newcpu.h \ + options.h \ + readcpu.cpp \ + readcpu.h \ + sysconfig.h \ + sysdeps.h \ + target.h + +SRC_PALM = Crc.c + +if SOLARIS +SRC_THREAD = solaris.cpp +else +SRC_THREAD = posix.cpp +endif + +bin_PROGRAMS = pose + +pose_LDADD = $(srcdir)/Gzip/libposergzip.a +pose_LDADD += $(srcdir)/jpeg/libposerjpeg.a +pose_LDADD += $(srcdir)/espws-2.0/libposerespws.a +pose_LDADD += -lfltk +pose_LDADD += -L/usr/local/lib $(X_LIBS) -lXext -lX11 $(THREAD_LIBS) $(GLLIB) -lm + +pose_SOURCES = $(SRC_UNIX) $(SRC_UNIX_GEN) $(SRC_SHARED) $(SRC_SHARED_HARDWARE) +pose_SOURCES += $(SRC_PATCHES) $(SRC_TRG) $(SRC_UAE) $(SRC_PALM) $(SRC_THREAD) + +ResStrings.cpp: $(srcdir)/../SrcShared/Strings.txt + perl -x $(srcdir)/../SrcShared/Strings.txt + +EmDlgFltkFactory.h EmDlgFltkFactory.cpp : $(srcdir)/../SrcUnix/EmDlgFltkFactory.fl + fluid -c $(srcdir)/../SrcUnix/EmDlgFltkFactory.fl + +EmDlgFltk.o : EmDlgFltkFactory.h + +mytags: + etags -R $(srcdir)/../SrcUnix/* $(srcdir)/../SrcShared/* + +CLEANFILES = ResStrings.cpp +CLEANFILES += EmDlgFltkFactory.h +CLEANFILES += EmDlgFltkFactory.cpp +CLEANFILES += config.cache +CLEANFILES += config.log diff --git a/BuildUnix/Makefile.in b/BuildUnix/Makefile.in new file mode 100644 index 0000000..874a534 --- /dev/null +++ b/BuildUnix/Makefile.in @@ -0,0 +1,659 @@ +# Makefile.in generated automatically by automake 1.4a from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = . + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_FLAG = +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_alias = @build_alias@ +build_triplet = @build@ +host_alias = @host_alias@ +host_triplet = @host@ +target_alias = @target_alias@ +target_triplet = @target@ +AR = @AR@ +CC = @CC@ +CPP = @CPP@ +CXX = @CXX@ +GLLIB = @GLLIB@ +MAKEINFO = @MAKEINFO@ +PACKAGE = @PACKAGE@ +POSER_CFLAGS = @POSER_CFLAGS@ +POSER_CXXFLAGS = @POSER_CXXFLAGS@ +RANLIB = @RANLIB@ +THREAD_FLAGS = @THREAD_FLAGS@ +THREAD_LIBS = @THREAD_LIBS@ +THREAD_SRC = @THREAD_SRC@ +VERSION = @VERSION@ + +SUBDIRS = Gzip jpeg espws-2.0 + +SUFFIXES = .cpp + +VPATH = $(srcdir)/../SrcUnix: $(srcdir)/../SrcShared: $(srcdir)/../SrcShared/Hardware: $(srcdir)/../SrcShared/Hardware/TRG: $(srcdir)/../SrcShared/omnithread: $(srcdir)/../SrcShared/Palm/Platform/Core/System/Src: $(srcdir)/../SrcShared/Patches: $(srcdir)/../SrcShared/UAE: + + +CFLAGS = $(POSER_CFLAGS) $(LOCAL_CFLAGS) $(FLAGS) $(THREAD_FLAGS) $(X_CFLAGS) +CXXFLAGS = $(POSER_CXXFLAGS) $(LOCAL_CFLAGS) $(FLAGS) $(THREAD_FLAGS) $(X_CFLAGS) +INCLUDES = -I$(srcdir)/../SrcShared -I$(srcdir)/../SrcShared/Hardware -I$(srcdir)/../SrcShared/Hardware/TRG -I$(srcdir)/../SrcShared/Palm/Device -I$(srcdir)/../SrcShared/Palm/Platform -I$(srcdir)/../SrcShared/Palm/Platform/Core/Hardware/IncsPrv -I$(srcdir)/../SrcShared/Palm/Platform/Core/System/IncsPrv -I$(srcdir)/../SrcShared/Palm/Platform/Incs -I$(srcdir)/../SrcShared/Palm/Platform/Incs/Core -I$(srcdir)/../SrcShared/Palm/Platform/Incs/Core/Hardware -I$(srcdir)/../SrcShared/Palm/Platform/Incs/Core/System -I$(srcdir)/../SrcShared/Palm/Platform/Incs/Core/UI -I$(srcdir)/../SrcShared/Palm/Platform/Incs/Libraries -I$(srcdir)/../SrcShared/Gzip -I$(srcdir)/../SrcShared/jpeg -I$(srcdir)/../SrcShared/omnithread -I$(srcdir)/../SrcShared/Patches -I$(srcdir)/../SrcShared/UAE -I$(srcdir)/../SrcUnix -I$(srcdir)/../SrcUnix/espws-2.0 + +SRC_UNIX = EmApplicationFltk.cpp EmApplicationFltk.h EmCommonUnix.h EmDirRefUnix.cpp EmDirRefUnix.h EmDlgFltk.cpp EmDlgFltk.h EmDocumentUnix.cpp EmDocumentUnix.h EmFileRefUnix.cpp EmFileRefUnix.h EmMenusFltk.cpp EmMenusFltk.h EmPixMapUnix.cpp EmPixMapUnix.h EmTransportSerialUnix.cpp EmTransportSerialUnix.h EmTransportUSBUnix.cpp EmTransportUSBUnix.h EmWindowFltk.cpp EmWindowFltk.h Platform_Unix.cpp jconfig.h + + +SRC_UNIX_GEN = ResStrings.cpp EmDlgFltkFactory.h EmDlgFltkFactory.cpp + + +SRC_SHARED = ATraps.cpp ATraps.h Byteswapping.cpp Byteswapping.h CGremlins.cpp CGremlins.h CGremlinsStubs.cpp CGremlinsStubs.h ChunkFile.cpp ChunkFile.h DebugMgr.cpp DebugMgr.h EcmIf.h EcmObject.h EmAction.cpp EmAction.h EmApplication.cpp EmApplication.h EmCommands.h EmCommon.cpp EmCommon.h EmDevice.cpp EmDevice.h EmDirRef.cpp EmDirRef.h EmDlg.cpp EmDlg.h EmDocument.cpp EmDocument.h EmErrCodes.h EmEventOutput.cpp EmEventOutput.h EmEventPlayback.cpp EmEventPlayback.h EmException.cpp EmException.h EmExgMgr.cpp EmExgMgr.h EmFileImport.cpp EmFileImport.h EmFileRef.cpp EmFileRef.h EmJPEG.cpp EmJPEG.h EmLowMem.cpp EmLowMem.h EmMapFile.cpp EmMapFile.h EmMenus.cpp EmMenus.h EmMinimize.cpp EmMinimize.h EmPalmFunction.cpp EmPalmFunction.h EmPalmHeap.cpp EmPalmHeap.h EmPalmOS.cpp EmPalmOS.h EmPalmStructs.cpp EmPalmStructs.h EmPalmStructs.i EmPixMap.cpp EmPixMap.h EmPoint.cpp EmPoint.h EmQuantizer.cpp EmQuantizer.h EmRect.cpp EmRect.h EmRefCounted.cpp EmRefCounted.h EmRegion.cpp EmRegion.h EmROMReader.cpp EmROMReader.h EmROMTransfer.cpp EmROMTransfer.h EmRPC.cpp EmRPC.h EmScreen.cpp EmScreen.h EmSession.cpp EmSession.h EmStream.cpp EmStream.h EmStreamFile.cpp EmStreamFile.h EmStructs.h EmSubroutine.cpp EmSubroutine.h EmThreadSafeQueue.cpp EmThreadSafeQueue.h EmTransport.cpp EmTransport.h EmTransportSerial.cpp EmTransportSerial.h EmTransportSocket.cpp EmTransportSocket.h EmTransportUSB.cpp EmTransportUSB.h EmTypes.h EmWindow.cpp EmWindow.h ErrorHandling.cpp ErrorHandling.h Hordes.cpp Hordes.h HostControl.cpp HostControl.h HostControlPrv.h LoadApplication.cpp LoadApplication.h Logging.cpp Logging.h Marshal.cpp Marshal.h MetaMemory.cpp MetaMemory.h Miscellaneous.cpp Miscellaneous.h Palm.h PalmOptErrorCheckLevel.h PalmPack.h PalmPackPop.h Platform.h Platform_NetLib.h Platform_NetLib_Sck.cpp PreferenceMgr.cpp PreferenceMgr.h Profiling.cpp Profiling.h ROMStubs.cpp ROMStubs.h SLP.cpp SLP.h SessionFile.cpp SessionFile.h Skins.cpp Skins.h SocketMessaging.cpp SocketMessaging.h Startup.cpp Startup.h StringConversions.cpp StringConversions.h StringData.cpp StringData.h SystemPacket.cpp SystemPacket.h + + +SRC_SHARED_HARDWARE = EmBankDRAM.cpp EmBankDRAM.h EmBankDummy.cpp EmBankDummy.h EmBankMapped.cpp EmBankMapped.h EmBankROM.cpp EmBankROM.h EmBankRegs.cpp EmBankRegs.h EmBankSRAM.cpp EmBankSRAM.h EmCPU.cpp EmCPU.h EmCPU68K.cpp EmCPU68K.h EmCPUARM.cpp EmCPUARM.h EmHAL.cpp EmHAL.h EmMemory.cpp EmMemory.h EmRegs.cpp EmRegs.h EmRegs328.cpp EmRegs328.h EmRegs328PalmIII.h EmRegs328PalmPilot.cpp EmRegs328PalmPilot.h EmRegs328PalmVII.h EmRegs328Pilot.h EmRegs328Prv.h EmRegs328Symbol1700.cpp EmRegs328Symbol1700.h EmRegsASICSymbol1700.cpp EmRegsASICSymbol1700.h EmRegsEZ.cpp EmRegsEZ.h EmRegsEZPalmIIIc.cpp EmRegsEZPalmIIIc.h EmRegsEZPalmIIIe.h EmRegsEZPalmIIIx.h EmRegsEZPalmM100.cpp EmRegsEZPalmM100.h EmRegsEZPalmV.cpp EmRegsEZPalmV.h EmRegsEZPalmVIIx.cpp EmRegsEZPalmVIIx.h EmRegsEZPalmVII.cpp EmRegsEZPalmVII.h EmRegsEZPalmVx.h EmRegsEZPrv.h EmRegsEZTemp.cpp EmRegsEZTemp.h EmRegsEZTRGpro.cpp EmRegsEZTRGpro.h EmRegsEZVisor.cpp EmRegsEZVisor.h EmRegsFrameBuffer.cpp EmRegsFrameBuffer.h EmRegsMediaQ11xx.cpp EmRegsMediaQ11xx.h EmRegsPLDPalmVIIEZ.cpp EmRegsPLDPalmVIIEZ.h EmRegsPrv.h EmRegsSED1375.cpp EmRegsSED1375.h EmRegsSED1376.cpp EmRegsSED1376.h EmRegsSZ.cpp EmRegsSZ.h EmRegsSZPrv.h EmRegsSZTemp.cpp EmRegsSZTemp.h EmRegsUSBPhilipsPDIUSBD12.cpp EmRegsUSBPhilipsPDIUSBD12.h EmRegsUSBVisor.cpp EmRegsUSBVisor.h EmRegsVZ.cpp EmRegsVZ.h EmRegsVZHandEra330.cpp EmRegsVZHandEra330.h EmRegsVZPalmM500.cpp EmRegsVZPalmM500.h EmRegsVZPalmM505.cpp EmRegsVZPalmM505.h EmRegsVZPrv.h EmRegsVZTemp.cpp EmRegsVZTemp.h EmRegsVZVisorEdge.cpp EmRegsVZVisorEdge.h EmRegsVZVisorPlatinum.cpp EmRegsVZVisorPlatinum.h EmRegsVZVisorPrism.cpp EmRegsVZVisorPrism.h EmSPISlave.cpp EmSPISlave.h EmSPISlaveADS784x.cpp EmSPISlaveADS784x.h EmUAEGlue.cpp EmUAEGlue.h EmUARTDragonball.cpp EmUARTDragonball.h + + +SRC_PATCHES = EmPatchIf.h EmPatchLoader.cpp EmPatchLoader.h EmPatchMgr.cpp EmPatchMgr.h EmPatchModule.cpp EmPatchModule.h EmPatchModuleHtal.cpp EmPatchModuleHtal.h EmPatchModuleMap.cpp EmPatchModuleMap.h EmPatchModuleMemMgr.cpp EmPatchModuleNetLib.cpp EmPatchModuleNetLib.h EmPatchModuleSys.cpp EmPatchModuleSys.h EmPatchModuleTypes.h EmPatchState.cpp EmPatchState.h + + +SRC_TRG = EmHandEra330Defs.h EmHandEraCFBus.h EmHandEraSDBus.h EmRegs330CPLD.cpp EmRegs330CPLD.h EmSPISlave330Current.cpp EmSPISlave330Current.h EmTRG.cpp EmTRG.h EmTRGATA.cpp EmTRGATA.h EmTRGCF.cpp EmTRGCF.h EmTRGCFDefs.h EmTRGCFIO.cpp EmTRGCFIO.h EmTRGCFMem.cpp EmTRGCFMem.h EmTRGDiskIO.cpp EmTRGDiskIO.h EmTRGDiskType.cpp EmTRGDiskType.h EmTRGSD.cpp EmTRGSD.h + + +SRC_UAE = UAE.h compiler.h config.h cpudefs.c cpuemu.c cpustbl.c cputbl.h custom.h machdep_m68k.h machdep_maccess.h memory_cpu.h newcpu.h options.h readcpu.cpp readcpu.h sysconfig.h sysdeps.h target.h + + +SRC_PALM = Crc.c +@SOLARIS_TRUE@SRC_THREAD = solaris.cpp +@SOLARIS_FALSE@SRC_THREAD = posix.cpp + +bin_PROGRAMS = pose +pose_LDADD = $(srcdir)/Gzip/libposergzip.a $(srcdir)/jpeg/libposerjpeg.a $(srcdir)/espws-2.0/libposerespws.a -lfltk -L/usr/local/lib $(X_LIBS) -lXext -lX11 $(THREAD_LIBS) $(GLLIB) -lm +pose_SOURCES = $(SRC_UNIX) $(SRC_UNIX_GEN) $(SRC_SHARED) $(SRC_SHARED_HARDWARE) $(SRC_PATCHES) $(SRC_TRG) $(SRC_UAE) $(SRC_PALM) $(SRC_THREAD) +CLEANFILES = ResStrings.cpp EmDlgFltkFactory.h EmDlgFltkFactory.cpp config.cache config.log +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_CLEAN_FILES = +PROGRAMS = $(bin_PROGRAMS) + + +DEFS = @DEFS@ -I. -I$(srcdir) +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +X_CFLAGS = @X_CFLAGS@ +X_LIBS = @X_LIBS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +@SOLARIS_TRUE@pose_OBJECTS = EmApplicationFltk.o EmDirRefUnix.o \ +@SOLARIS_TRUE@EmDlgFltk.o EmDocumentUnix.o EmFileRefUnix.o \ +@SOLARIS_TRUE@EmMenusFltk.o EmPixMapUnix.o EmTransportSerialUnix.o \ +@SOLARIS_TRUE@EmTransportUSBUnix.o EmWindowFltk.o Platform_Unix.o \ +@SOLARIS_TRUE@ResStrings.o EmDlgFltkFactory.o ATraps.o Byteswapping.o \ +@SOLARIS_TRUE@CGremlins.o CGremlinsStubs.o ChunkFile.o DebugMgr.o \ +@SOLARIS_TRUE@EmAction.o EmApplication.o EmCommon.o EmDevice.o \ +@SOLARIS_TRUE@EmDirRef.o EmDlg.o EmDocument.o EmEventOutput.o \ +@SOLARIS_TRUE@EmEventPlayback.o EmException.o EmExgMgr.o EmFileImport.o \ +@SOLARIS_TRUE@EmFileRef.o EmJPEG.o EmLowMem.o EmMapFile.o EmMenus.o \ +@SOLARIS_TRUE@EmMinimize.o EmPalmFunction.o EmPalmHeap.o EmPalmOS.o \ +@SOLARIS_TRUE@EmPalmStructs.o EmPixMap.o EmPoint.o EmQuantizer.o \ +@SOLARIS_TRUE@EmRect.o EmRefCounted.o EmRegion.o EmROMReader.o \ +@SOLARIS_TRUE@EmROMTransfer.o EmRPC.o EmScreen.o EmSession.o EmStream.o \ +@SOLARIS_TRUE@EmStreamFile.o EmSubroutine.o EmThreadSafeQueue.o \ +@SOLARIS_TRUE@EmTransport.o EmTransportSerial.o EmTransportSocket.o \ +@SOLARIS_TRUE@EmTransportUSB.o EmWindow.o ErrorHandling.o Hordes.o \ +@SOLARIS_TRUE@HostControl.o LoadApplication.o Logging.o Marshal.o \ +@SOLARIS_TRUE@MetaMemory.o Miscellaneous.o Platform_NetLib_Sck.o \ +@SOLARIS_TRUE@PreferenceMgr.o Profiling.o ROMStubs.o SLP.o \ +@SOLARIS_TRUE@SessionFile.o Skins.o SocketMessaging.o Startup.o \ +@SOLARIS_TRUE@StringConversions.o StringData.o SystemPacket.o \ +@SOLARIS_TRUE@EmBankDRAM.o EmBankDummy.o EmBankMapped.o EmBankROM.o \ +@SOLARIS_TRUE@EmBankRegs.o EmBankSRAM.o EmCPU.o EmCPU68K.o EmCPUARM.o \ +@SOLARIS_TRUE@EmHAL.o EmMemory.o EmRegs.o EmRegs328.o \ +@SOLARIS_TRUE@EmRegs328PalmPilot.o EmRegs328Symbol1700.o \ +@SOLARIS_TRUE@EmRegsASICSymbol1700.o EmRegsEZ.o EmRegsEZPalmIIIc.o \ +@SOLARIS_TRUE@EmRegsEZPalmM100.o EmRegsEZPalmV.o EmRegsEZPalmVIIx.o \ +@SOLARIS_TRUE@EmRegsEZPalmVII.o EmRegsEZTemp.o EmRegsEZTRGpro.o \ +@SOLARIS_TRUE@EmRegsEZVisor.o EmRegsFrameBuffer.o EmRegsMediaQ11xx.o \ +@SOLARIS_TRUE@EmRegsPLDPalmVIIEZ.o EmRegsSED1375.o EmRegsSED1376.o \ +@SOLARIS_TRUE@EmRegsSZ.o EmRegsSZTemp.o EmRegsUSBPhilipsPDIUSBD12.o \ +@SOLARIS_TRUE@EmRegsUSBVisor.o EmRegsVZ.o EmRegsVZHandEra330.o \ +@SOLARIS_TRUE@EmRegsVZPalmM500.o EmRegsVZPalmM505.o EmRegsVZTemp.o \ +@SOLARIS_TRUE@EmRegsVZVisorEdge.o EmRegsVZVisorPlatinum.o \ +@SOLARIS_TRUE@EmRegsVZVisorPrism.o EmSPISlave.o EmSPISlaveADS784x.o \ +@SOLARIS_TRUE@EmUAEGlue.o EmUARTDragonball.o EmPatchLoader.o \ +@SOLARIS_TRUE@EmPatchMgr.o EmPatchModule.o EmPatchModuleHtal.o \ +@SOLARIS_TRUE@EmPatchModuleMap.o EmPatchModuleMemMgr.o \ +@SOLARIS_TRUE@EmPatchModuleNetLib.o EmPatchModuleSys.o EmPatchState.o \ +@SOLARIS_TRUE@EmRegs330CPLD.o EmSPISlave330Current.o EmTRG.o EmTRGATA.o \ +@SOLARIS_TRUE@EmTRGCF.o EmTRGCFIO.o EmTRGCFMem.o EmTRGDiskIO.o \ +@SOLARIS_TRUE@EmTRGDiskType.o EmTRGSD.o cpudefs.o cpuemu.o cpustbl.o \ +@SOLARIS_TRUE@readcpu.o Crc.o solaris.o +@SOLARIS_FALSE@pose_OBJECTS = EmApplicationFltk.o EmDirRefUnix.o \ +@SOLARIS_FALSE@EmDlgFltk.o EmDocumentUnix.o EmFileRefUnix.o \ +@SOLARIS_FALSE@EmMenusFltk.o EmPixMapUnix.o EmTransportSerialUnix.o \ +@SOLARIS_FALSE@EmTransportUSBUnix.o EmWindowFltk.o Platform_Unix.o \ +@SOLARIS_FALSE@ResStrings.o EmDlgFltkFactory.o ATraps.o Byteswapping.o \ +@SOLARIS_FALSE@CGremlins.o CGremlinsStubs.o ChunkFile.o DebugMgr.o \ +@SOLARIS_FALSE@EmAction.o EmApplication.o EmCommon.o EmDevice.o \ +@SOLARIS_FALSE@EmDirRef.o EmDlg.o EmDocument.o EmEventOutput.o \ +@SOLARIS_FALSE@EmEventPlayback.o EmException.o EmExgMgr.o \ +@SOLARIS_FALSE@EmFileImport.o EmFileRef.o EmJPEG.o EmLowMem.o \ +@SOLARIS_FALSE@EmMapFile.o EmMenus.o EmMinimize.o EmPalmFunction.o \ +@SOLARIS_FALSE@EmPalmHeap.o EmPalmOS.o EmPalmStructs.o EmPixMap.o \ +@SOLARIS_FALSE@EmPoint.o EmQuantizer.o EmRect.o EmRefCounted.o \ +@SOLARIS_FALSE@EmRegion.o EmROMReader.o EmROMTransfer.o EmRPC.o \ +@SOLARIS_FALSE@EmScreen.o EmSession.o EmStream.o EmStreamFile.o \ +@SOLARIS_FALSE@EmSubroutine.o EmThreadSafeQueue.o EmTransport.o \ +@SOLARIS_FALSE@EmTransportSerial.o EmTransportSocket.o EmTransportUSB.o \ +@SOLARIS_FALSE@EmWindow.o ErrorHandling.o Hordes.o HostControl.o \ +@SOLARIS_FALSE@LoadApplication.o Logging.o Marshal.o MetaMemory.o \ +@SOLARIS_FALSE@Miscellaneous.o Platform_NetLib_Sck.o PreferenceMgr.o \ +@SOLARIS_FALSE@Profiling.o ROMStubs.o SLP.o SessionFile.o Skins.o \ +@SOLARIS_FALSE@SocketMessaging.o Startup.o StringConversions.o \ +@SOLARIS_FALSE@StringData.o SystemPacket.o EmBankDRAM.o EmBankDummy.o \ +@SOLARIS_FALSE@EmBankMapped.o EmBankROM.o EmBankRegs.o EmBankSRAM.o \ +@SOLARIS_FALSE@EmCPU.o EmCPU68K.o EmCPUARM.o EmHAL.o EmMemory.o \ +@SOLARIS_FALSE@EmRegs.o EmRegs328.o EmRegs328PalmPilot.o \ +@SOLARIS_FALSE@EmRegs328Symbol1700.o EmRegsASICSymbol1700.o EmRegsEZ.o \ +@SOLARIS_FALSE@EmRegsEZPalmIIIc.o EmRegsEZPalmM100.o EmRegsEZPalmV.o \ +@SOLARIS_FALSE@EmRegsEZPalmVIIx.o EmRegsEZPalmVII.o EmRegsEZTemp.o \ +@SOLARIS_FALSE@EmRegsEZTRGpro.o EmRegsEZVisor.o EmRegsFrameBuffer.o \ +@SOLARIS_FALSE@EmRegsMediaQ11xx.o EmRegsPLDPalmVIIEZ.o EmRegsSED1375.o \ +@SOLARIS_FALSE@EmRegsSED1376.o EmRegsSZ.o EmRegsSZTemp.o \ +@SOLARIS_FALSE@EmRegsUSBPhilipsPDIUSBD12.o EmRegsUSBVisor.o EmRegsVZ.o \ +@SOLARIS_FALSE@EmRegsVZHandEra330.o EmRegsVZPalmM500.o \ +@SOLARIS_FALSE@EmRegsVZPalmM505.o EmRegsVZTemp.o EmRegsVZVisorEdge.o \ +@SOLARIS_FALSE@EmRegsVZVisorPlatinum.o EmRegsVZVisorPrism.o \ +@SOLARIS_FALSE@EmSPISlave.o EmSPISlaveADS784x.o EmUAEGlue.o \ +@SOLARIS_FALSE@EmUARTDragonball.o EmPatchLoader.o EmPatchMgr.o \ +@SOLARIS_FALSE@EmPatchModule.o EmPatchModuleHtal.o EmPatchModuleMap.o \ +@SOLARIS_FALSE@EmPatchModuleMemMgr.o EmPatchModuleNetLib.o \ +@SOLARIS_FALSE@EmPatchModuleSys.o EmPatchState.o EmRegs330CPLD.o \ +@SOLARIS_FALSE@EmSPISlave330Current.o EmTRG.o EmTRGATA.o EmTRGCF.o \ +@SOLARIS_FALSE@EmTRGCFIO.o EmTRGCFMem.o EmTRGDiskIO.o EmTRGDiskType.o \ +@SOLARIS_FALSE@EmTRGSD.o cpudefs.o cpuemu.o cpustbl.o readcpu.o Crc.o \ +@SOLARIS_FALSE@posix.o +pose_DEPENDENCIES = $(srcdir)/Gzip/libposergzip.a \ +$(srcdir)/jpeg/libposerjpeg.a $(srcdir)/espws-2.0/libposerespws.a +pose_LDFLAGS = +CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ +COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ +DIST_COMMON = Makefile.am Makefile.in aclocal.m4 config.guess \ +config.sub configure configure.in install-sh missing mkinstalldirs + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = gtar +GZIP_ENV = --best +DEP_FILES = .deps/ATraps.P .deps/Byteswapping.P .deps/CGremlins.P \ +.deps/CGremlinsStubs.P .deps/ChunkFile.P .deps/Crc.P .deps/DebugMgr.P \ +.deps/EmAction.P .deps/EmApplication.P .deps/EmApplicationFltk.P \ +.deps/EmBankDRAM.P .deps/EmBankDummy.P .deps/EmBankMapped.P \ +.deps/EmBankROM.P .deps/EmBankRegs.P .deps/EmBankSRAM.P .deps/EmCPU.P \ +.deps/EmCPU68K.P .deps/EmCPUARM.P .deps/EmCommon.P .deps/EmDevice.P \ +.deps/EmDirRef.P .deps/EmDirRefUnix.P .deps/EmDlg.P .deps/EmDlgFltk.P \ +.deps/EmDlgFltkFactory.P .deps/EmDocument.P .deps/EmDocumentUnix.P \ +.deps/EmEventOutput.P .deps/EmEventPlayback.P .deps/EmException.P \ +.deps/EmExgMgr.P .deps/EmFileImport.P .deps/EmFileRef.P \ +.deps/EmFileRefUnix.P .deps/EmHAL.P .deps/EmJPEG.P .deps/EmLowMem.P \ +.deps/EmMapFile.P .deps/EmMemory.P .deps/EmMenus.P .deps/EmMenusFltk.P \ +.deps/EmMinimize.P .deps/EmPalmFunction.P .deps/EmPalmHeap.P \ +.deps/EmPalmOS.P .deps/EmPalmStructs.P .deps/EmPatchLoader.P \ +.deps/EmPatchMgr.P .deps/EmPatchModule.P .deps/EmPatchModuleHtal.P \ +.deps/EmPatchModuleMap.P .deps/EmPatchModuleMemMgr.P \ +.deps/EmPatchModuleNetLib.P .deps/EmPatchModuleSys.P \ +.deps/EmPatchState.P .deps/EmPixMap.P .deps/EmPixMapUnix.P \ +.deps/EmPoint.P .deps/EmQuantizer.P .deps/EmROMReader.P \ +.deps/EmROMTransfer.P .deps/EmRPC.P .deps/EmRect.P .deps/EmRefCounted.P \ +.deps/EmRegion.P .deps/EmRegs.P .deps/EmRegs328.P \ +.deps/EmRegs328PalmPilot.P .deps/EmRegs328Symbol1700.P \ +.deps/EmRegs330CPLD.P .deps/EmRegsASICSymbol1700.P .deps/EmRegsEZ.P \ +.deps/EmRegsEZPalmIIIc.P .deps/EmRegsEZPalmM100.P .deps/EmRegsEZPalmV.P \ +.deps/EmRegsEZPalmVII.P .deps/EmRegsEZPalmVIIx.P .deps/EmRegsEZTRGpro.P \ +.deps/EmRegsEZTemp.P .deps/EmRegsEZVisor.P .deps/EmRegsFrameBuffer.P \ +.deps/EmRegsMediaQ11xx.P .deps/EmRegsPLDPalmVIIEZ.P \ +.deps/EmRegsSED1375.P .deps/EmRegsSED1376.P .deps/EmRegsSZ.P \ +.deps/EmRegsSZTemp.P .deps/EmRegsUSBPhilipsPDIUSBD12.P \ +.deps/EmRegsUSBVisor.P .deps/EmRegsVZ.P .deps/EmRegsVZHandEra330.P \ +.deps/EmRegsVZPalmM500.P .deps/EmRegsVZPalmM505.P .deps/EmRegsVZTemp.P \ +.deps/EmRegsVZVisorEdge.P .deps/EmRegsVZVisorPlatinum.P \ +.deps/EmRegsVZVisorPrism.P .deps/EmSPISlave.P \ +.deps/EmSPISlave330Current.P .deps/EmSPISlaveADS784x.P .deps/EmScreen.P \ +.deps/EmSession.P .deps/EmStream.P .deps/EmStreamFile.P \ +.deps/EmSubroutine.P .deps/EmTRG.P .deps/EmTRGATA.P .deps/EmTRGCF.P \ +.deps/EmTRGCFIO.P .deps/EmTRGCFMem.P .deps/EmTRGDiskIO.P \ +.deps/EmTRGDiskType.P .deps/EmTRGSD.P .deps/EmThreadSafeQueue.P \ +.deps/EmTransport.P .deps/EmTransportSerial.P \ +.deps/EmTransportSerialUnix.P .deps/EmTransportSocket.P \ +.deps/EmTransportUSB.P .deps/EmTransportUSBUnix.P .deps/EmUAEGlue.P \ +.deps/EmUARTDragonball.P .deps/EmWindow.P .deps/EmWindowFltk.P \ +.deps/ErrorHandling.P .deps/Hordes.P .deps/HostControl.P \ +.deps/LoadApplication.P .deps/Logging.P .deps/Marshal.P \ +.deps/MetaMemory.P .deps/Miscellaneous.P .deps/Platform_NetLib_Sck.P \ +.deps/Platform_Unix.P .deps/PreferenceMgr.P .deps/Profiling.P \ +.deps/ROMStubs.P .deps/ResStrings.P .deps/SLP.P .deps/SessionFile.P \ +.deps/Skins.P .deps/SocketMessaging.P .deps/Startup.P \ +.deps/StringConversions.P .deps/StringData.P .deps/SystemPacket.P \ +.deps/cpudefs.P .deps/cpuemu.P .deps/cpustbl.P .deps/posix.P \ +.deps/readcpu.P .deps/solaris.P +SOURCES = $(pose_SOURCES) +OBJECTS = $(pose_OBJECTS) + +all: all-redirect +.SUFFIXES: +.SUFFIXES: .S .c .cpp .o .s +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) + cd $(top_builddir) \ + && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status + +$(ACLOCAL_M4): configure.in + cd $(srcdir) && $(ACLOCAL) + +config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck +$(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) + cd $(srcdir) && $(AUTOCONF) + +mostlyclean-binPROGRAMS: + +clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) + +distclean-binPROGRAMS: + +maintainer-clean-binPROGRAMS: + +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(bindir) + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + if test -f $$p; then \ + echo " $(INSTALL_PROGRAM) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \ + $(INSTALL_PROGRAM) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ + else :; fi; \ + done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + list='$(bin_PROGRAMS)'; for p in $$list; do \ + rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ + done + +.s.o: + $(COMPILE) -c $< + +.S.o: + $(COMPILE) -c $< + +mostlyclean-compile: + -rm -f *.o core *.core + +clean-compile: + +distclean-compile: + -rm -f *.tab.c + +maintainer-clean-compile: + +pose: $(pose_OBJECTS) $(pose_DEPENDENCIES) + @rm -f pose + $(CXXLINK) $(pose_LDFLAGS) $(pose_OBJECTS) $(pose_LDADD) $(LIBS) +.cpp.o: + $(CXXCOMPILE) -c $< + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. + +@SET_MAKE@ + +all-recursive install-data-recursive install-exec-recursive \ +installdirs-recursive install-recursive uninstall-recursive \ +check-recursive installcheck-recursive info-recursive dvi-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + dot_seen=no; \ + rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ + rev="$$subdir $$rev"; \ + test "$$subdir" = "." && dot_seen=yes; \ + done; \ + test "$$dot_seen" = "no" && rev=". $$rev"; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + -rm -rf $(distdir) + GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz + mkdir $(distdir)/=build + mkdir $(distdir)/=inst + dc_install_base=`cd $(distdir)/=inst && pwd`; \ + cd $(distdir)/=build \ + && ../configure --srcdir=.. --prefix=$$dc_install_base \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) dist + -rm -rf $(distdir) + @banner="$(distdir).tar.gz is ready for distribution"; \ + dashes=`echo "$$banner" | sed s/./=/g`; \ + echo "$$dashes"; \ + echo "$$banner"; \ + echo "$$dashes" +dist: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) + -rm -rf $(distdir) +dist-all: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) + -rm -rf $(distdir) +distdir: $(DISTFILES) + -rm -rf $(distdir) + mkdir $(distdir) + -chmod 777 $(distdir) + here=`cd $(top_builddir) && pwd`; \ + top_distdir=`cd $(distdir) && pwd`; \ + distdir=`cd $(distdir) && pwd`; \ + cd $(top_srcdir) \ + && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Makefile + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$d/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done + for subdir in $(SUBDIRS); do \ + if test "$$subdir" = .; then :; else \ + test -d $(distdir)/$$subdir \ + || mkdir $(distdir)/$$subdir \ + || exit 1; \ + chmod 777 $(distdir)/$$subdir; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \ + || exit 1; \ + fi; \ + done + +DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) + +-include $(DEP_FILES) + +mostlyclean-depend: + +clean-depend: + +distclean-depend: + -rm -rf .deps + +maintainer-clean-depend: + +%.o: %.c + @echo '$(COMPILE) -c $<'; \ + $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-cp .deps/$(*F).pp .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm .deps/$(*F).pp + +%.lo: %.c + @echo '$(LTCOMPILE) -c $<'; \ + $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ + < .deps/$(*F).pp > .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm -f .deps/$(*F).pp + +%.o: %.cpp + @echo '$(CXXCOMPILE) -c $<'; \ + $(CXXCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-cp .deps/$(*F).pp .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm .deps/$(*F).pp + +%.lo: %.cpp + @echo '$(LTCXXCOMPILE) -c $<'; \ + $(LTCXXCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ + < .deps/$(*F).pp > .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm -f .deps/$(*F).pp +info-am: +info: info-recursive +dvi-am: +dvi: dvi-recursive +check-am: all-am +check: check-recursive +installcheck-am: +installcheck: installcheck-recursive +install-exec-am: install-binPROGRAMS +install-exec: install-exec-recursive + +install-data-am: +install-data: install-data-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-recursive +uninstall-am: uninstall-binPROGRAMS +uninstall: uninstall-recursive +all-am: Makefile $(PROGRAMS) +all-redirect: all-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install +installdirs: installdirs-recursive +installdirs-am: + $(mkinstalldirs) $(DESTDIR)$(bindir) + + +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-binPROGRAMS mostlyclean-compile \ + mostlyclean-tags mostlyclean-depend mostlyclean-generic + +mostlyclean: mostlyclean-recursive + +clean-am: clean-binPROGRAMS clean-compile clean-tags clean-depend \ + clean-generic mostlyclean-am + +clean: clean-recursive + +distclean-am: distclean-binPROGRAMS distclean-compile distclean-tags \ + distclean-depend distclean-generic clean-am + +distclean: distclean-recursive + -rm -f config.status + +maintainer-clean-am: maintainer-clean-binPROGRAMS \ + maintainer-clean-compile maintainer-clean-tags \ + maintainer-clean-depend maintainer-clean-generic \ + distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-recursive + -rm -f config.status + +.PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \ +maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \ +mostlyclean-compile distclean-compile clean-compile \ +maintainer-clean-compile install-data-recursive \ +uninstall-data-recursive install-exec-recursive \ +uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ +all-recursive check-recursive installcheck-recursive info-recursive \ +dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ +maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir \ +mostlyclean-depend distclean-depend clean-depend \ +maintainer-clean-depend info-am info dvi-am dvi check check-am \ +installcheck-am installcheck install-exec-am install-exec \ +install-data-am install-data install-am install uninstall-am uninstall \ +all-redirect all-am all installdirs-am installdirs mostlyclean-generic \ +distclean-generic clean-generic maintainer-clean-generic clean \ +mostlyclean distclean maintainer-clean + + +ResStrings.cpp: $(srcdir)/../SrcShared/Strings.txt + perl -x $(srcdir)/../SrcShared/Strings.txt + +EmDlgFltkFactory.h EmDlgFltkFactory.cpp : $(srcdir)/../SrcUnix/EmDlgFltkFactory.fl + fluid -c $(srcdir)/../SrcUnix/EmDlgFltkFactory.fl + +EmDlgFltk.o : EmDlgFltkFactory.h + +mytags: + etags -R $(srcdir)/../SrcUnix/* $(srcdir)/../SrcShared/* + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/BuildUnix/aclocal.m4 b/BuildUnix/aclocal.m4 new file mode 100644 index 0000000..be5a94a --- /dev/null +++ b/BuildUnix/aclocal.m4 @@ -0,0 +1,119 @@ +dnl aclocal.m4 generated automatically by aclocal 1.4a + +dnl Copyright (C) 1994, 1995-8, 1999 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 This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without +dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A +dnl PARTICULAR PURPOSE. + +# Do all the work for Automake. This macro actually does too much -- +# some checks are only needed if your package does certain things. +# But this isn't really a big deal. + +# serial 1 + +dnl Usage: +dnl AM_INIT_AUTOMAKE(package,version, [no-define]) + +AC_DEFUN(AM_INIT_AUTOMAKE, +[AC_REQUIRE([AC_PROG_INSTALL]) +dnl We require 2.13 because we rely on SHELL being computed by configure. +AC_PREREQ([2.13]) +PACKAGE=[$1] +AC_SUBST(PACKAGE) +VERSION=[$2] +AC_SUBST(VERSION) +dnl test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +fi +ifelse([$3],, +AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) +AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])) +AC_REQUIRE([AM_SANITY_CHECK]) +AC_REQUIRE([AC_ARG_PROGRAM]) +dnl FIXME This is truly gross. +missing_dir=`cd $ac_aux_dir && pwd` +AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir) +AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir) +AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir) +AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir) +AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir) +AC_REQUIRE([AC_PROG_MAKE_SET])]) + +# +# Check to make sure that the build environment is sane. +# + +AC_DEFUN(AM_SANITY_CHECK, +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftestfile +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` + if test "[$]*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftestfile` + fi + if test "[$]*" != "X $srcdir/configure conftestfile" \ + && test "[$]*" != "X conftestfile $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "[$]2" = conftestfile + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +rm -f conftest* +AC_MSG_RESULT(yes)]) + +dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY) +dnl The program must properly implement --version. +AC_DEFUN(AM_MISSING_PROG, +[AC_MSG_CHECKING(for working $2) +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if ($2 --version) < /dev/null > /dev/null 2>&1; then + $1=$2 + AC_MSG_RESULT(found) +else + $1="$3/missing $2" + AC_MSG_RESULT(missing) +fi +AC_SUBST($1)]) + +# Define a conditional. + +AC_DEFUN(AM_CONDITIONAL, +[AC_SUBST($1_TRUE) +AC_SUBST($1_FALSE) +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi]) + diff --git a/BuildUnix/config.guess b/BuildUnix/config.guess new file mode 100755 index 0000000..1ec70cc --- /dev/null +++ b/BuildUnix/config.guess @@ -0,0 +1,951 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. +# +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Written by Per Bothner . +# The master version of this file is at the FSF in /home/gd/gnu/lib. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit system type (host/target name). +# +# Only a few systems have been added to this list; please add others +# (but try to keep the structure clean). +# + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 8/24/94.) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15 + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + alpha:OSF1:*:*) + if test $UNAME_RELEASE = "V4.0"; then + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + fi + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + cat <dummy.s + .globl main + .ent main +main: + .frame \$30,0,\$26,0 + .prologue 0 + .long 0x47e03d80 # implver $0 + lda \$2,259 + .long 0x47e20c21 # amask $2,$1 + srl \$1,8,\$2 + sll \$2,2,\$2 + sll \$0,3,\$0 + addl \$1,\$0,\$0 + addl \$2,\$0,\$0 + ret \$31,(\$26),1 + .end main +EOF + ${CC-cc} dummy.s -o dummy 2>/dev/null + if test "$?" = 0 ; then + ./dummy + case "$?" in + 7) + UNAME_MACHINE="alpha" + ;; + 15) + UNAME_MACHINE="alphaev5" + ;; + 14) + UNAME_MACHINE="alphaev56" + ;; + 10) + UNAME_MACHINE="alphapca56" + ;; + 16) + UNAME_MACHINE="alphaev6" + ;; + esac + fi + rm -f dummy.s dummy + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr [[A-Z]] [[a-z]]` + exit 0 ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit 0 ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-cbm-sysv4 + exit 0;; + amiga:NetBSD:*:*) + echo m68k-cbm-netbsd${UNAME_RELEASE} + exit 0 ;; + amiga:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit 0 ;; + arc64:OpenBSD:*:*) + echo mips64el-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + hkmips:OpenBSD:*:*) + echo mips-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + pmax:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sgi:OpenBSD:*:*) + echo mips-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + wgrisc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit 0;; + arm32:NetBSD:*:*) + echo arm-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + exit 0 ;; + SR2?01:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit 0;; + Pyramid*:OSx*:*:*|MIS*:OSx*:*:*|MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit 0 ;; + NILE:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit 0 ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit 0 ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit 0 ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit 0 ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit 0 ;; + atari*:NetBSD:*:*) + echo m68k-atari-netbsd${UNAME_RELEASE} + exit 0 ;; + atari*:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sun3*:NetBSD:*:*) + echo m68k-sun-netbsd${UNAME_RELEASE} + exit 0 ;; + sun3*:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:NetBSD:*:*) + echo m68k-apple-netbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme88k:OpenBSD:*:*) + echo m88k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit 0 ;; + macppc:NetBSD:*:*) + echo powerpc-apple-netbsd${UNAME_RELEASE} + exit 0 ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit 0 ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + 2020:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit 0 ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + sed 's/^ //' << EOF >dummy.c + int main (argc, argv) int argc; char **argv; { + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + ${CC-cc} dummy.c -o dummy \ + && ./dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ + && rm dummy.c dummy && exit 0 + rm -f dummy.c dummy + echo mips-mips-riscos${UNAME_RELEASE} + exit 0 ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit 0 ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit 0 ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit 0 ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit 0 ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \ + -o ${TARGET_BINARY_INTERFACE}x = x ] ; then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else echo i586-dg-dgux${UNAME_RELEASE} + fi + exit 0 ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit 0 ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit 0 ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit 0 ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit 0 ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit 0 ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i?86:AIX:*:*) + echo i386-ibm-aix + exit 0 ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + sed 's/^ //' << EOF >dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0 + rm -f dummy.c dummy + echo rs6000-ibm-aix3.2.5 + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit 0 ;; + *:AIX:*:4) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'` + if /usr/sbin/lsattr -EHl ${IBM_CPU_ID} | grep POWER >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=4.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit 0 ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit 0 ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit 0 ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit 0 ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit 0 ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit 0 ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit 0 ;; + 9000/[34678]??:HP-UX:*:*) + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/6?? | 9000/7?? | 9000/80[24] | 9000/8?[13679] | 9000/892 ) + sed 's/^ //' << EOF >dummy.c + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (${CC-cc} dummy.c -o dummy 2>/dev/null ) && HP_ARCH=`./dummy` + rm -f dummy.c dummy + esac + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit 0 ;; + 3050*:HI-UX:*:*) + sed 's/^ //' << EOF >dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0 + rm -f dummy.c dummy + echo unknown-hitachi-hiuxwe2 + exit 0 ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit 0 ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit 0 ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit 0 ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit 0 ;; + i?86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit 0 ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit 0 ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit 0 ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit 0 ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit 0 ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit 0 ;; + CRAY*X-MP:*:*:*) + echo xmp-cray-unicos + exit 0 ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} + exit 0 ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ + exit 0 ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} + exit 0 ;; + CRAY-2:*:*:*) + echo cray2-cray-unicos + exit 0 ;; + F300:UNIX_System_V:*:*) + FUJITSU_SYS=`uname -p | tr [A-Z] [a-z] | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; + F301:UNIX_System_V:*:*) + echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'` + exit 0 ;; + hp3[0-9][05]:NetBSD:*:*) + echo m68k-hp-netbsd${UNAME_RELEASE} + exit 0 ;; + hp300:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + i?86:BSD/386:*:* | *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit 0 ;; + *:FreeBSD:*:*) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit 0 ;; + *:NetBSD:*:*) + echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + exit 0 ;; + *:OpenBSD:*:*) + echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + exit 0 ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin32 + exit 0 ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit 0 ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin32 + exit 0 ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + *:GNU:*:*) + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit 0 ;; + *:Linux:*:*) + # uname on the ARM produces all sorts of strangeness, and we need to + # filter it out. + case "$UNAME_MACHINE" in + arm* | sa110*) UNAME_MACHINE="arm" ;; + esac + + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. + ld_help_string=`ld --help 2>&1` + ld_supported_emulations=`echo $ld_help_string \ + | sed -ne '/supported emulations:/!d + s/[ ][ ]*/ /g + s/.*supported emulations: *// + s/ .*// + p'` + case "$ld_supported_emulations" in + i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 ;; + i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 ;; + sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; + armlinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; + m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; + elf32ppc) echo "powerpc-unknown-linux-gnu" ; exit 0 ;; + esac + + if test "${UNAME_MACHINE}" = "alpha" ; then + sed 's/^ //' <dummy.s + .globl main + .ent main + main: + .frame \$30,0,\$26,0 + .prologue 0 + .long 0x47e03d80 # implver $0 + lda \$2,259 + .long 0x47e20c21 # amask $2,$1 + srl \$1,8,\$2 + sll \$2,2,\$2 + sll \$0,3,\$0 + addl \$1,\$0,\$0 + addl \$2,\$0,\$0 + ret \$31,(\$26),1 + .end main +EOF + LIBC="" + ${CC-cc} dummy.s -o dummy 2>/dev/null + if test "$?" = 0 ; then + ./dummy + case "$?" in + 7) + UNAME_MACHINE="alpha" + ;; + 15) + UNAME_MACHINE="alphaev5" + ;; + 14) + UNAME_MACHINE="alphaev56" + ;; + 10) + UNAME_MACHINE="alphapca56" + ;; + 16) + UNAME_MACHINE="alphaev6" + ;; + esac + + objdump --private-headers dummy | \ + grep ld.so.1 > /dev/null + if test "$?" = 0 ; then + LIBC="libc1" + fi + fi + rm -f dummy.s dummy + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0 + elif test "${UNAME_MACHINE}" = "mips" ; then + cat >dummy.c </dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0 + rm -f dummy.c dummy + else + # Either a pre-BFD a.out linker (linux-gnuoldld) + # or one that does not give us useful --help. + # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout. + # If ld does not provide *any* "supported emulations:" + # that means it is gnuoldld. + echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:" + test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0 + + case "${UNAME_MACHINE}" in + i?86) + VENDOR=pc; + ;; + *) + VENDOR=unknown; + ;; + esac + # Determine whether the default compiler is a.out or elf + cat >dummy.c < +main(argc, argv) + int argc; + char *argv[]; +{ +#ifdef __ELF__ +# ifdef __GLIBC__ +# if __GLIBC__ >= 2 + printf ("%s-${VENDOR}-linux-gnu\n", argv[1]); +# else + printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); +# endif +# else + printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); +# endif +#else + printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]); +#endif + return 0; +} +EOF + ${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0 + rm -f dummy.c dummy + fi ;; +# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions +# are messed up and put the nodename in both sysname and nodename. + i?86:DYNIX/ptx:4*:*) + echo i386-sequent-sysv4 + exit 0 ;; + i?86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit 0 ;; + i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*) + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE} + fi + exit 0 ;; + i?86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` + (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit 0 ;; + i?86:UnixWare:*:*) + if /bin/uname -X 2>/dev/null >/dev/null ; then + (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + fi + echo ${UNAME_MACHINE}-unixware-${UNAME_RELEASE}-${UNAME_VERSION} + exit 0 ;; + pc:*:*:*) + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit 0 ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit 0 ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit 0 ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit 0 ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit 0 ;; + M68*:*:R3V[567]*:*) + test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; + 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4.3${OS_REL} && exit 0 + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4 && exit 0 ;; + m68*:LynxOS:2.*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit 0 ;; + i?86:LynxOS:2.*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit 0 ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit 0 ;; + PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit 0 ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit 0 ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit 0 ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit 0 ;; + news*:NEWS-OS:*:6*) + echo mips-sony-newsos6 + exit 0 ;; + R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R4000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit 0 ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit 0 ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit 0 ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit 0 ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +cat >dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +#if !defined (ultrix) + printf ("vax-dec-bsd\n"); exit (0); +#else + printf ("vax-dec-ultrix\n"); exit (0); +#endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0 +rm -f dummy.c dummy + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit 0 ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + c34*) + echo c34-convex-bsd + exit 0 ;; + c38*) + echo c38-convex-bsd + exit 0 ;; + c4*) + echo c4-convex-bsd + exit 0 ;; + esac +fi + +#echo '(Unable to guess system type)' 1>&2 + +exit 1 diff --git a/BuildUnix/config.sub b/BuildUnix/config.sub new file mode 100755 index 0000000..ba26d74 --- /dev/null +++ b/BuildUnix/config.sub @@ -0,0 +1,955 @@ +#! /bin/sh +# Configuration validation subroutine script, version 1.1. +# Copyright (C) 1991, 92-97, 1998 Free Software Foundation, Inc. +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +if [ x$1 = x ] +then + echo Configuration name missing. 1>&2 + echo "Usage: $0 CPU-MFR-OPSYS" 1>&2 + echo "or $0 ALIAS" 1>&2 + echo where ALIAS is a recognized configuration type. 1>&2 + exit 1 +fi + +# First pass through any local machine types. +case $1 in + *local*) + echo $1 + exit 0 + ;; + *) + ;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + linux-gnu*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple) + os= + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco5) + os=sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \ + | arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \ + | 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 | hppa2.0 \ + | alpha | alphaev5 | alphaev56 | we32k | ns16k | clipper \ + | i370 | sh | powerpc | powerpcle | 1750a | dsp16xx | pdp11 \ + | mips64 | mipsel | mips64el | mips64orion | mips64orionel \ + | mipstx39 | mipstx39el | armv[34][lb] \ + | sparc | sparclet | sparclite | sparc64 | v850) + basic_machine=$basic_machine-unknown + ;; + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i[34567]86) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + vax-* | tahoe-* | i[34567]86-* | i860-* | m32r-* | m68k-* | m68000-* \ + | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \ + | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ + | power-* | none-* | 580-* | cray2-* | h8300-* | i960-* \ + | xmp-* | ymp-* | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* \ + | alpha-* | alphaev5-* | alphaev56-* | we32k-* | cydra-* \ + | ns16k-* | pn-* | np1-* | xps100-* | clipper-* | orion-* \ + | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \ + | sparc64-* | mips64-* | mipsel-* | armv[34][lb]-*\ + | mips64el-* | mips64orion-* | mips64orionel-* \ + | mipstx39-* | mipstx39el-* \ + | f301-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-cbm + ;; + amigaos | amigados) + basic_machine=m68k-cbm + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-cbm + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | ymp) + basic_machine=ymp-cray + os=-unicos + ;; + cray2) + basic_machine=cray2-cray + os=-unicos + ;; + [ctj]90-cray) + basic_machine=c90-cray + os=-unicos + ;; + crds | unos) + basic_machine=m68k-crds + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + os=-mvs + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i[34567]86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i[34567]86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i[34567]86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i[34567]86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + miniframe) + basic_machine=m68000-convergent + ;; + mipsel*-linux*) + basic_machine=mipsel-unknown + os=-linux-gnu + ;; + mips*-linux*) + basic_machine=mips-unknown + os=-linux-gnu + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + np1) + basic_machine=np1-gould + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pentium | p5 | k5 | nexen) + basic_machine=i586-pc + ;; + pentiumpro | p6 | k6 | 6x86) + basic_machine=i686-pc + ;; + pentiumii | pentium2) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | nexen-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | k6-* | 6x86-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=rs6000-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + xmp) + basic_machine=xmp-cray + os=-unicos + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + mips) + if [ x$os = x-linux-gnu ]; then + basic_machine=mips-unknown + else + basic_machine=mips-mips + fi + ;; + romp) + basic_machine=romp-ibm + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sparc) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ + | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -uxpv* | -beos*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -ctix* | -uts*) + os=-sysv + ;; + -ns2 ) + os=-nextstep2 + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -xenix) + os=-xenix + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + *-acorn) + os=-riscix1.2 + ;; + arm*-semi) + os=-aout + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-ibm) + os=-aix + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f301-fujitsu) + os=-uxpv + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -hpux*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -vxsim* | -vxworks*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os diff --git a/BuildUnix/configure b/BuildUnix/configure new file mode 100755 index 0000000..a537745 --- /dev/null +++ b/BuildUnix/configure @@ -0,0 +1,3974 @@ +#! /bin/sh + +# Guess values for system-dependent variables and create Makefiles. +# Generated automatically using autoconf version 2.13 +# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. + +# Defaults: +ac_help= +ac_default_prefix=/usr/local +# Any additions from configure.in: +ac_help="$ac_help + --with-x use the X Window System" +ac_help="$ac_help + --with-fltk=DIR use FLTK in DIR" +ac_help="$ac_help + --enable-profile include gprof profiling (default no)" +ac_help="$ac_help + --enable-palm-profile include profiling of Palm applications (default no)" +ac_help="$ac_help + --enable-static-link static link; no shared libraries (default no)" +ac_help="$ac_help + --enable-debug include debugging symbols (default no)" + +# Initialize some variables set by options. +# The variables have the same names as the options, with +# dashes changed to underlines. +build=NONE +cache_file=./config.cache +exec_prefix=NONE +host=NONE +no_create= +nonopt=NONE +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +target=NONE +verbose= +x_includes=NONE +x_libraries=NONE +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +# Initialize some other variables. +subdirs= +MFLAGS= MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} +# Maximum number of lines to put in a shell here document. +ac_max_here_lines=12 + +ac_prev= +for ac_option +do + + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + case "$ac_option" in + -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) ac_optarg= ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case "$ac_option" in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir="$ac_optarg" ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build="$ac_optarg" ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file="$ac_optarg" ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir="$ac_optarg" ;; + + -disable-* | --disable-*) + ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + eval "enable_${ac_feature}=no" ;; + + -enable-* | --enable-*) + ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "enable_${ac_feature}='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix="$ac_optarg" ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he) + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat << EOF +Usage: configure [options] [host] +Options: [defaults in brackets after descriptions] +Configuration: + --cache-file=FILE cache test results in FILE + --help print this message + --no-create do not create output files + --quiet, --silent do not print \`checking...' messages + --version print the version of autoconf that created configure +Directory and file names: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [same as prefix] + --bindir=DIR user executables in DIR [EPREFIX/bin] + --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] + --libexecdir=DIR program executables in DIR [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data in DIR + [PREFIX/share] + --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data in DIR + [PREFIX/com] + --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] + --libdir=DIR object code libraries in DIR [EPREFIX/lib] + --includedir=DIR C header files in DIR [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] + --infodir=DIR info documentation in DIR [PREFIX/info] + --mandir=DIR man documentation in DIR [PREFIX/man] + --srcdir=DIR find the sources in DIR [configure dir or ..] + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM + run sed PROGRAM on installed program names +EOF + cat << EOF +Host type: + --build=BUILD configure for building on BUILD [BUILD=HOST] + --host=HOST configure for HOST [guessed] + --target=TARGET configure for TARGET [TARGET=HOST] +Features and packages: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR +EOF + if test -n "$ac_help"; then + echo "--enable and --with options recognized:$ac_help" + fi + exit 0 ;; + + -host | --host | --hos | --ho) + ac_prev=host ;; + -host=* | --host=* | --hos=* | --ho=*) + host="$ac_optarg" ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir="$ac_optarg" ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir="$ac_optarg" ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir="$ac_optarg" ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir="$ac_optarg" ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir="$ac_optarg" ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir="$ac_optarg" ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir="$ac_optarg" ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix="$ac_optarg" ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix="$ac_optarg" ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix="$ac_optarg" ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name="$ac_optarg" ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir="$ac_optarg" ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir="$ac_optarg" ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site="$ac_optarg" ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir="$ac_optarg" ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir="$ac_optarg" ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target="$ac_optarg" ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers) + echo "configure generated by autoconf version 2.13" + exit 0 ;; + + -with-* | --with-*) + ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "with_${ac_package}='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`echo $ac_option|sed -e 's/-*without-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + eval "with_${ac_package}=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes="$ac_optarg" ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries="$ac_optarg" ;; + + -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } + ;; + + *) + if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then + echo "configure: warning: $ac_option: invalid host type" 1>&2 + fi + if test "x$nonopt" != xNONE; then + { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } + fi + nonopt="$ac_option" + ;; + + esac +done + +if test -n "$ac_prev"; then + { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } +fi + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 6 checking for... messages and results +# 5 compiler messages saved in config.log +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>./config.log + +echo "\ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. +" 1>&5 + +# Strip out --no-create and --no-recursion so they do not pile up. +# Also quote any args containing shell metacharacters. +ac_configure_args= +for ac_arg +do + case "$ac_arg" in + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) ;; + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) ac_configure_args="$ac_configure_args $ac_arg" ;; + esac +done + +# NLS nuisances. +# Only set these to C if already set. These must not be set unconditionally +# because not all systems understand e.g. LANG=C (notably SCO). +# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! +# Non-C LC_CTYPE values break the ctype check. +if test "${LANG+set}" = set; then LANG=C; export LANG; fi +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi +if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo > confdefs.h + +# A filename unique to this package, relative to the directory that +# configure is in, which we can look for to find out if srcdir is correct. +ac_unique_file=../SrcUnix/Platform_Unix.cpp + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_prog=$0 + ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` + test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } + else + { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } + fi +fi +srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` + +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + echo "loading site script $ac_site_file" + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + echo "loading cache $cache_file" + . $cache_file +else + echo "creating cache $cache_file" + > $cache_file +fi + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +ac_exeext= +ac_objext=o +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + + +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 + fi +done +if test -z "$ac_aux_dir"; then + { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } +fi +ac_config_guess=$ac_aux_dir/config.guess +ac_config_sub=$ac_aux_dir/config.sub +ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. + + +# Do some error checking and defaulting for the host and target type. +# The inputs are: +# configure --host=HOST --target=TARGET --build=BUILD NONOPT +# +# The rules are: +# 1. You are not allowed to specify --host, --target, and nonopt at the +# same time. +# 2. Host defaults to nonopt. +# 3. If nonopt is not specified, then host defaults to the current host, +# as determined by config.guess. +# 4. Target and build default to nonopt. +# 5. If nonopt is not specified, then target and build default to host. + +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +case $host---$target---$nonopt in +NONE---*---* | *---NONE---* | *---*---NONE) ;; +*) { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ;; +esac + + +# Make sure we can run config.sub. +if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : +else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } +fi + +echo $ac_n "checking host system type""... $ac_c" 1>&6 +echo "configure:584: checking host system type" >&5 + +host_alias=$host +case "$host_alias" in +NONE) + case $nonopt in + NONE) + if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then : + else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } + fi ;; + *) host_alias=$nonopt ;; + esac ;; +esac + +host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` +host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +echo "$ac_t""$host" 1>&6 + +echo $ac_n "checking target system type""... $ac_c" 1>&6 +echo "configure:605: checking target system type" >&5 + +target_alias=$target +case "$target_alias" in +NONE) + case $nonopt in + NONE) target_alias=$host_alias ;; + *) target_alias=$nonopt ;; + esac ;; +esac + +target=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $target_alias` +target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +echo "$ac_t""$target" 1>&6 + +echo $ac_n "checking build system type""... $ac_c" 1>&6 +echo "configure:623: checking build system type" >&5 + +build_alias=$build +case "$build_alias" in +NONE) + case $nonopt in + NONE) build_alias=$host_alias ;; + *) build_alias=$nonopt ;; + esac ;; +esac + +build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias` +build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +echo "$ac_t""$build" 1>&6 + +test "$host_alias" != "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- + +# 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 +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# ./install, which can be erroneously created by make from ./install.sh. +echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 +echo "configure:657: checking for a BSD compatible install" >&5 +if test -z "$INSTALL"; then +if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" + for ac_dir in $PATH; do + # Account for people who put trailing slashes in PATH elements. + case "$ac_dir/" in + /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + if test -f $ac_dir/$ac_prog; then + if test $ac_prog = install && + grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + else + ac_cv_path_install="$ac_dir/$ac_prog -c" + break 2 + fi + fi + done + ;; + esac + done + IFS="$ac_save_IFS" + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL="$ac_cv_path_install" + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL="$ac_install_sh" + fi +fi +echo "$ac_t""$INSTALL" 1>&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6 +echo "configure:710: checking whether build environment is sane" >&5 +# Just in case +sleep 1 +echo timestamp > conftestfile +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftestfile` + fi + if test "$*" != "X $srcdir/configure conftestfile" \ + && test "$*" != "X conftestfile $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + { echo "configure: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" 1>&2; exit 1; } + fi + + test "$2" = conftestfile + ) +then + # Ok. + : +else + { echo "configure: error: newly created file is older than distributed files! +Check your system clock" 1>&2; exit 1; } +fi +rm -f conftest* +echo "$ac_t""yes" 1>&6 +if test "$program_transform_name" = s,x,x,; then + program_transform_name= +else + # Double any \ or $. echo might interpret backslashes. + cat <<\EOF_SED > conftestsed +s,\\,\\\\,g; s,\$,$$,g +EOF_SED + program_transform_name="`echo $program_transform_name|sed -f conftestsed`" + rm -f conftestsed +fi +test "$program_prefix" != NONE && + program_transform_name="s,^,${program_prefix},; $program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s,\$\$,${program_suffix},; $program_transform_name" + +# sed with no file args requires a program. +test "$program_transform_name" = "" && program_transform_name="s,x,x," + +echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 +echo "configure:767: checking whether ${MAKE-make} sets \${MAKE}" >&5 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftestmake <<\EOF +all: + @echo 'ac_maketemp="${MAKE}"' +EOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftestmake +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$ac_t""yes" 1>&6 + SET_MAKE= +else + echo "$ac_t""no" 1>&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + + + +PACKAGE=pose + +VERSION=0 + +if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then + { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } +fi + + + +missing_dir=`cd $ac_aux_dir && pwd` +echo $ac_n "checking for working aclocal""... $ac_c" 1>&6 +echo "configure:807: checking for working aclocal" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (aclocal --version) < /dev/null > /dev/null 2>&1; then + ACLOCAL=aclocal + echo "$ac_t""found" 1>&6 +else + ACLOCAL="$missing_dir/missing aclocal" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working autoconf""... $ac_c" 1>&6 +echo "configure:820: checking for working autoconf" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (autoconf --version) < /dev/null > /dev/null 2>&1; then + AUTOCONF=autoconf + echo "$ac_t""found" 1>&6 +else + AUTOCONF="$missing_dir/missing autoconf" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working automake""... $ac_c" 1>&6 +echo "configure:833: checking for working automake" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (automake --version) < /dev/null > /dev/null 2>&1; then + AUTOMAKE=automake + echo "$ac_t""found" 1>&6 +else + AUTOMAKE="$missing_dir/missing automake" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working autoheader""... $ac_c" 1>&6 +echo "configure:846: checking for working autoheader" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (autoheader --version) < /dev/null > /dev/null 2>&1; then + AUTOHEADER=autoheader + echo "$ac_t""found" 1>&6 +else + AUTOHEADER="$missing_dir/missing autoheader" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6 +echo "configure:859: checking for working makeinfo" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (makeinfo --version) < /dev/null > /dev/null 2>&1; then + MAKEINFO=makeinfo + echo "$ac_t""found" 1>&6 +else + MAKEINFO="$missing_dir/missing makeinfo" + echo "$ac_t""missing" 1>&6 +fi + + + +echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 +echo "configure:874: checking whether ${MAKE-make} sets \${MAKE}" >&5 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftestmake <<\EOF +all: + @echo 'ac_maketemp="${MAKE}"' +EOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftestmake +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$ac_t""yes" 1>&6 + SET_MAKE= +else + echo "$ac_t""no" 1>&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + +# Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:903: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="gcc" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +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 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:933: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_prog_rejected=no + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + break + fi + done + IFS="$ac_save_ifs" +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# -gt 0; then + # We chose a different compiler from the bogus one. + # 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 + set dummy "$ac_dir/$ac_word" "$@" + shift + ac_cv_prog_CC="$@" + fi +fi +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + if test -z "$CC"; then + case "`uname -s`" in + *win32* | *WIN32*) + # Extract the first word of "cl", so it can be a program name with args. +set dummy cl; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:984: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="cl" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + ;; + esac + fi + test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } +fi + +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 +echo "configure:1016: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +cat > conftest.$ac_ext << EOF + +#line 1027 "configure" +#include "confdefs.h" + +main(){return(0);} +EOF +if { (eval echo configure:1032: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + ac_cv_prog_cc_works=yes + # If we can't run a trivial program, we are probably using a cross compiler. + if (./conftest; exit) 2>/dev/null; then + ac_cv_prog_cc_cross=no + else + ac_cv_prog_cc_cross=yes + fi +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_prog_cc_works=no +fi +rm -fr conftest* +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 +if test $ac_cv_prog_cc_works = no; then + { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } +fi +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 +echo "configure:1058: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 +cross_compiling=$ac_cv_prog_cc_cross + +echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 +echo "configure:1063: checking whether we are using GNU C" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + ac_cv_prog_gcc=yes +else + ac_cv_prog_gcc=no +fi +fi + +echo "$ac_t""$ac_cv_prog_gcc" 1>&6 + +if test $ac_cv_prog_gcc = yes; then + GCC=yes +else + GCC= +fi + +ac_test_CFLAGS="${CFLAGS+set}" +ac_save_CFLAGS="$CFLAGS" +CFLAGS= +echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 +echo "configure:1091: checking whether ${CC-cc} accepts -g" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + echo 'void f(){}' > conftest.c +if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then + ac_cv_prog_cc_g=yes +else + ac_cv_prog_cc_g=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_prog_cc_g" 1>&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 + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi + +for ac_prog in $CCC c++ g++ gcc CC cxx cc++ cl +do +# Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1127: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CXX="$ac_prog" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CXX="$ac_cv_prog_CXX" +if test -n "$CXX"; then + echo "$ac_t""$CXX" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +test -n "$CXX" && break +done +test -n "$CXX" || CXX="gcc" + + +echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6 +echo "configure:1159: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5 + +ac_ext=C +# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cxx_cross + +cat > conftest.$ac_ext << EOF + +#line 1170 "configure" +#include "confdefs.h" + +int main(){return(0);} +EOF +if { (eval echo configure:1175: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + ac_cv_prog_cxx_works=yes + # If we can't run a trivial program, we are probably using a cross compiler. + if (./conftest; exit) 2>/dev/null; then + ac_cv_prog_cxx_cross=no + else + ac_cv_prog_cxx_cross=yes + fi +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_prog_cxx_works=no +fi +rm -fr conftest* +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +echo "$ac_t""$ac_cv_prog_cxx_works" 1>&6 +if test $ac_cv_prog_cxx_works = no; then + { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; } +fi +echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 +echo "configure:1201: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6 +cross_compiling=$ac_cv_prog_cxx_cross + +echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6 +echo "configure:1206: checking whether we are using GNU C++" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.C <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + ac_cv_prog_gxx=yes +else + ac_cv_prog_gxx=no +fi +fi + +echo "$ac_t""$ac_cv_prog_gxx" 1>&6 + +if test $ac_cv_prog_gxx = yes; then + GXX=yes +else + GXX= +fi + +ac_test_CXXFLAGS="${CXXFLAGS+set}" +ac_save_CXXFLAGS="$CXXFLAGS" +CXXFLAGS= +echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6 +echo "configure:1234: checking whether ${CXX-g++} accepts -g" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + echo 'void f(){}' > conftest.cc +if test -z "`${CXX-g++} -g -c conftest.cc 2>&1`"; then + ac_cv_prog_cxx_g=yes +else + ac_cv_prog_cxx_g=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_prog_cxx_g" 1>&6 +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS="$ac_save_CXXFLAGS" +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi + +# Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1268: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_RANLIB="ranlib" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" +fi +fi +RANLIB="$ac_cv_prog_RANLIB" +if test -n "$RANLIB"; then + echo "$ac_t""$RANLIB" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + + + +echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 +echo "configure:1299: checking how to run the C preprocessor" >&5 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then +if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + # This must be in double quotes, not single quotes, because CPP may get + # substituted into the Makefile and "${CC-cc}" will confuse make. + CPP="${CC-cc} -E" + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1320: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP="${CC-cc} -E -traditional-cpp" + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1337: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP="${CC-cc} -nologo -E" + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1354: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP=/lib/cpp +fi +rm -f conftest* +fi +rm -f conftest* +fi +rm -f conftest* + ac_cv_prog_CPP="$CPP" +fi + CPP="$ac_cv_prog_CPP" +else + ac_cv_prog_CPP="$CPP" +fi +echo "$ac_t""$CPP" 1>&6 + + + + +# If we find X, set shell vars x_includes and x_libraries to the +# paths, otherwise set no_x=yes. +# Uses ac_ vars as temps to allow command line to override cache and checks. +# --without-x overrides everything else, but does not touch the cache. +echo $ac_n "checking for X""... $ac_c" 1>&6 +echo "configure:1386: checking for X" >&5 + +# Check whether --with-x or --without-x was given. +if test "${with_x+set}" = set; then + withval="$with_x" + : +fi + +# $have_x is `yes', `no', `disabled', or empty when we do not yet know. +if test "x$with_x" = xno; then + # The user explicitly disabled X. + have_x=disabled +else + if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then + # Both variables are already set. + have_x=yes + else +if eval "test \"`echo '$''{'ac_cv_have_x'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&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 +rm -fr conftestdir +if mkdir conftestdir; then + cd conftestdir + # Make sure to not put "make" in the Imakefile rules, since we grep it out. + cat > Imakefile <<'EOF' +acfindx: + @echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"' +EOF + if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then + # GNU make sometimes prints "make[1]: Entering...", which would confuse us. + eval `${MAKE-make} acfindx 2>/dev/null | grep -v make` + # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. + for ac_extension in a so sl; do + if test ! -f $ac_im_usrlibdir/libX11.$ac_extension && + test -f $ac_im_libdir/libX11.$ac_extension; then + ac_im_usrlibdir=$ac_im_libdir; break + fi + done + # Screen out bogus values from the imake configuration. They are + # bogus both because they are the default anyway, and because + # using them would break gcc on systems where it needs fixed includes. + case "$ac_im_incroot" in + /usr/include) ;; + *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes="$ac_im_incroot" ;; + esac + case "$ac_im_usrlibdir" in + /usr/lib | /lib) ;; + *) test -d "$ac_im_usrlibdir" && ac_x_libraries="$ac_im_usrlibdir" ;; + esac + fi + cd .. + rm -fr conftestdir +fi + +if test "$ac_x_includes" = NO; then + # Guess where to find include files, by looking for this one X11 .h file. + test -z "$x_direct_test_include" && x_direct_test_include=X11/Intrinsic.h + + # First, try using that file with no special directory specified. +cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1453: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + # We can compile using X headers with no special include directory. +ac_x_includes= +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + # Look for the header file in a standard set of common directories. +# Check X11 before X11Rn because it is often a symlink to the current release. + for ac_dir in \ + /usr/X11/include \ + /usr/X11R6/include \ + /usr/X11R5/include \ + /usr/X11R4/include \ + \ + /usr/include/X11 \ + /usr/include/X11R6 \ + /usr/include/X11R5 \ + /usr/include/X11R4 \ + \ + /usr/local/X11/include \ + /usr/local/X11R6/include \ + /usr/local/X11R5/include \ + /usr/local/X11R4/include \ + \ + /usr/local/include/X11 \ + /usr/local/include/X11R6 \ + /usr/local/include/X11R5 \ + /usr/local/include/X11R4 \ + \ + /usr/X386/include \ + /usr/x386/include \ + /usr/XFree86/include/X11 \ + \ + /usr/include \ + /usr/local/include \ + /usr/unsupported/include \ + /usr/athena/include \ + /usr/local/x11r5/include \ + /usr/lpp/Xamples/include \ + \ + /usr/openwin/include \ + /usr/openwin/share/include \ + ; \ + do + if test -r "$ac_dir/$x_direct_test_include"; then + ac_x_includes=$ac_dir + break + fi + done +fi +rm -f conftest* +fi # $ac_x_includes = NO + +if test "$ac_x_libraries" = NO; then + # Check for the libraries. + + test -z "$x_direct_test_library" && x_direct_test_library=Xt + test -z "$x_direct_test_function" && x_direct_test_function=XtMalloc + + # See if we find them without any special options. + # Don't add to $LIBS permanently. + ac_save_LIBS="$LIBS" + LIBS="-l$x_direct_test_library $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + LIBS="$ac_save_LIBS" +# We can link X programs with no special library path. +ac_x_libraries= +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + LIBS="$ac_save_LIBS" +# First see if replacing the include by lib works. +# Check X11 before X11Rn because it is often a symlink to the current release. +for ac_dir in `echo "$ac_x_includes" | sed s/include/lib/` \ + /usr/X11/lib \ + /usr/X11R6/lib \ + /usr/X11R5/lib \ + /usr/X11R4/lib \ + \ + /usr/lib/X11 \ + /usr/lib/X11R6 \ + /usr/lib/X11R5 \ + /usr/lib/X11R4 \ + \ + /usr/local/X11/lib \ + /usr/local/X11R6/lib \ + /usr/local/X11R5/lib \ + /usr/local/X11R4/lib \ + \ + /usr/local/lib/X11 \ + /usr/local/lib/X11R6 \ + /usr/local/lib/X11R5 \ + /usr/local/lib/X11R4 \ + \ + /usr/X386/lib \ + /usr/x386/lib \ + /usr/XFree86/lib/X11 \ + \ + /usr/lib \ + /usr/local/lib \ + /usr/unsupported/lib \ + /usr/athena/lib \ + /usr/local/x11r5/lib \ + /usr/lpp/Xamples/lib \ + /lib/usr/lib/X11 \ + \ + /usr/openwin/lib \ + /usr/openwin/share/lib \ + ; \ +do + for ac_extension in a so sl; do + if test -r $ac_dir/lib${x_direct_test_library}.$ac_extension; then + ac_x_libraries=$ac_dir + break 2 + fi + done +done +fi +rm -f conftest* +fi # $ac_x_libraries = NO + +if test "$ac_x_includes" = NO || test "$ac_x_libraries" = NO; then + # Didn't find X anywhere. Cache the known absence of X. + ac_cv_have_x="have_x=no" +else + # 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" +fi +fi + fi + eval "$ac_cv_have_x" +fi # $with_x != no + +if test "$have_x" != yes; then + echo "$ac_t""$have_x" 1>&6 + no_x=yes +else + # If each of the values was on the command line, it overrides each guess. + test "x$x_includes" = xNONE && x_includes=$ac_x_includes + test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries + # Update the cache value to reflect the command line values. + ac_cv_have_x="have_x=yes \ + ac_x_includes=$x_includes ac_x_libraries=$x_libraries" + echo "$ac_t""libraries $x_libraries, headers $x_includes" 1>&6 +fi + +if test "$no_x" = yes; then + # Not all programs may use this symbol, but it does not hurt to define it. + cat >> confdefs.h <<\EOF +#define X_DISPLAY_MISSING 1 +EOF + + X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= +else + if test -n "$x_includes"; then + X_CFLAGS="$X_CFLAGS -I$x_includes" + fi + + # It would also be nice to do this for all -L options, not just this one. + if test -n "$x_libraries"; then + 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 . . . . + case "`(uname -sr) 2>/dev/null`" in + "SunOS 5"*) + echo $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6 +echo "configure:1635: checking whether -R must be followed by a space" >&5 + ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries" + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + ac_R_nospace=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_R_nospace=no +fi +rm -f conftest* + if test $ac_R_nospace = yes; then + echo "$ac_t""no" 1>&6 + X_LIBS="$X_LIBS -R$x_libraries" + else + LIBS="$ac_xsave_LIBS -R $x_libraries" + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + ac_R_space=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_R_space=no +fi +rm -f conftest* + if test $ac_R_space = yes; then + echo "$ac_t""yes" 1>&6 + X_LIBS="$X_LIBS -R $x_libraries" + else + echo "$ac_t""neither works" 1>&6 + fi + fi + LIBS="$ac_xsave_LIBS" + esac + fi + + # Check for system-dependent libraries X programs must link with. + # Do this before checking for the system-independent R6 libraries + # (-lICE), since we may need -lsocket or whatever for X linking. + + if test "$ISC" = yes; then + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" + else + # Martyn.Johnson@cl.cam.ac.uk says this is needed for Ultrix, if the X + # libraries were built with DECnet support. And karl@cs.umb.edu says + # the Alpha needs dnet_stub (dnet does not exist). + echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6 +echo "configure:1700: checking for dnet_ntoa in -ldnet" >&5 +ac_lib_var=`echo dnet'_'dnet_ntoa | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-ldnet $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" +else + echo "$ac_t""no" 1>&6 +fi + + if test $ac_cv_lib_dnet_dnet_ntoa = no; then + echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6 +echo "configure:1741: checking for dnet_ntoa in -ldnet_stub" >&5 +ac_lib_var=`echo dnet_stub'_'dnet_ntoa | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-ldnet_stub $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" +else + echo "$ac_t""no" 1>&6 +fi + + fi + + # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, + # to get the SysV transport functions. + # chad@anasazi.com says the Pyramis MIS-ES running DC/OSx (SVR4) + # needs -lnsl. + # The nsl library prevents programs from opening the X display + # on Irix 5.2, according to dickey@clark.net. + echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6 +echo "configure:1789: checking for gethostbyname" >&5 +if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char gethostbyname(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_gethostbyname) || defined (__stub___gethostbyname) +choke me +#else +gethostbyname(); +#endif + +; return 0; } +EOF +if { (eval echo configure:1817: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_gethostbyname=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_gethostbyname=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'gethostbyname`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +fi + + if test $ac_cv_func_gethostbyname = no; then + echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6 +echo "configure:1838: checking for gethostbyname in -lnsl" >&5 +ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lnsl $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" +else + echo "$ac_t""no" 1>&6 +fi + + fi + + # lieder@skyler.mavd.honeywell.com says without -lsocket, + # socket/setsockopt and other routines are undefined under SCO ODT + # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary + # on later versions), says simon@lia.di.epfl.ch: it contains + # gethostby* variants that don't use the nameserver (or something). + # -lsocket must be given before -lnsl if both are needed. + # We assume that if connect needs -lnsl, so does gethostbyname. + echo $ac_n "checking for connect""... $ac_c" 1>&6 +echo "configure:1887: checking for connect" >&5 +if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char connect(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_connect) || defined (__stub___connect) +choke me +#else +connect(); +#endif + +; return 0; } +EOF +if { (eval echo configure:1915: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_connect=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_connect=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'connect`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +fi + + if test $ac_cv_func_connect = no; then + echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6 +echo "configure:1936: checking for connect in -lsocket" >&5 +ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lsocket $X_EXTRA_LIBS $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" +else + echo "$ac_t""no" 1>&6 +fi + + fi + + # gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX. + echo $ac_n "checking for remove""... $ac_c" 1>&6 +echo "configure:1979: checking for remove" >&5 +if eval "test \"`echo '$''{'ac_cv_func_remove'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char remove(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_remove) || defined (__stub___remove) +choke me +#else +remove(); +#endif + +; return 0; } +EOF +if { (eval echo configure:2007: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_remove=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_remove=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'remove`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +fi + + if test $ac_cv_func_remove = no; then + echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6 +echo "configure:2028: checking for remove in -lposix" >&5 +ac_lib_var=`echo posix'_'remove | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lposix $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" +else + echo "$ac_t""no" 1>&6 +fi + + fi + + # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. + echo $ac_n "checking for shmat""... $ac_c" 1>&6 +echo "configure:2071: checking for shmat" >&5 +if eval "test \"`echo '$''{'ac_cv_func_shmat'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shmat(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_shmat) || defined (__stub___shmat) +choke me +#else +shmat(); +#endif + +; return 0; } +EOF +if { (eval echo configure:2099: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_shmat=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_shmat=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'shmat`\" = yes"; then + echo "$ac_t""yes" 1>&6 + : +else + echo "$ac_t""no" 1>&6 +fi + + if test $ac_cv_func_shmat = no; then + echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6 +echo "configure:2120: checking for shmat in -lipc" >&5 +ac_lib_var=`echo ipc'_'shmat | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lipc $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" +else + echo "$ac_t""no" 1>&6 +fi + + fi + fi + + # Check for libraries that X11R6 Xt/Xaw programs need. + ac_save_LDFLAGS="$LDFLAGS" + test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" + # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to + # check for ICE first), but we must link in the order -lSM -lICE or + # we get undefined symbols. So assume we have SM if we have ICE. + # These have to be linked with before -lX11, unlike the other + # libraries we check for below, so use a different variable. + # --interran@uluru.Stanford.EDU, kb@cs.umb.edu. + echo $ac_n "checking for IceConnectionNumber in -lICE""... $ac_c" 1>&6 +echo "configure:2172: checking for IceConnectionNumber in -lICE" >&5 +ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lICE $X_EXTRA_LIBS $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" +else + echo "$ac_t""no" 1>&6 +fi + + LDFLAGS="$ac_save_LDFLAGS" + +fi + + +# Check whether --with-fltk or --without-fltk was given. +if test "${with_fltk+set}" = set; then + withval="$with_fltk" + + CPPFLAGS="${CPPFLAGS} -I$withval/include" + LDFLAGS="${LDFLAGS} -L$withval/lib" + +fi + + + + +ac_header_dirent=no +for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 +echo "configure:2233: checking for $ac_hdr that defines DIR" >&5 +if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include <$ac_hdr> +int main() { +DIR *dirp = 0; +; return 0; } +EOF +if { (eval echo configure:2246: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "ac_cv_header_dirent_$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_dirent_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_dirent_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done +# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. +if test $ac_header_dirent = dirent.h; then +echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 +echo "configure:2271: checking for opendir in -ldir" >&5 +ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-ldir $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + LIBS="$LIBS -ldir" +else + echo "$ac_t""no" 1>&6 +fi + +else +echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 +echo "configure:2312: checking for opendir in -lx" >&5 +ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lx $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + LIBS="$LIBS -lx" +else + echo "$ac_t""no" 1>&6 +fi + +fi + +echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 +echo "configure:2354: checking for ANSI C header files" >&5 +if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include +#include +#include +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:2367: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + ac_cv_header_stdc=yes +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. +cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "memchr" >/dev/null 2>&1; then + : +else + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. +cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "free" >/dev/null 2>&1; then + : +else + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +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 > conftest.$ac_ext < +#define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int main () { int i; for (i = 0; i < 256; i++) +if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); +exit (0); } + +EOF +if { (eval echo configure:2434: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + : +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_header_stdc=no +fi +rm -fr conftest* +fi + +fi +fi + +echo "$ac_t""$ac_cv_header_stdc" 1>&6 +if test $ac_cv_header_stdc = yes; then + cat >> confdefs.h <<\EOF +#define STDC_HEADERS 1 +EOF + +fi + +for ac_hdr in endian.h machine/endian.h sys/isa_defs.h fcntl.h limits.h strings.h sys/time.h unistd.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:2461: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:2471: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + + + + +echo $ac_n "checking for working const""... $ac_c" 1>&6 +echo "configure:2501: checking for working const" >&5 +if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <j = 5; +} +{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; +} + +; return 0; } +EOF +if { (eval echo configure:2555: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_c_const=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_c_const=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_c_const" 1>&6 +if test $ac_cv_c_const = no; then + cat >> confdefs.h <<\EOF +#define const +EOF + +fi + +echo $ac_n "checking for inline""... $ac_c" 1>&6 +echo "configure:2576: checking for inline" >&5 +if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_c_inline=$ac_kw; break +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -f conftest* +done + +fi + +echo "$ac_t""$ac_cv_c_inline" 1>&6 +case "$ac_cv_c_inline" in + inline | yes) ;; + no) cat >> confdefs.h <<\EOF +#define inline +EOF + ;; + *) cat >> confdefs.h <&6 +echo "configure:2625: checking for 'sa_len' in 'struct sockaddr'" >&5 +if eval "test \"`echo '$''{'ac_cv_struct_sa_len'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < + #include + +int main() { + + struct sockaddr sa; + sa.sa_len = 0; + +; return 0; } +EOF +if { (eval echo configure:2643: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_struct_sa_len=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_struct_sa_len=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_struct_sa_len" 1>&6 + if test "$ac_cv_struct_sa_len" = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_SA_LEN 1 +EOF + + fi +echo $ac_n "checking for 'sin_len' in 'struct sockaddr_in'""... $ac_c" 1>&6 +echo "configure:2663: checking for 'sin_len' in 'struct sockaddr_in'" >&5 +if eval "test \"`echo '$''{'ac_cv_struct_sin_len'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < + #include + #include + +int main() { + + struct sockaddr_in sin; + sin.sin_len = 0; + +; return 0; } +EOF +if { (eval echo configure:2682: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_struct_sin_len=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_struct_sin_len=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_struct_sin_len" 1>&6 + if test "$ac_cv_struct_sin_len" = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_SIN_LEN 1 +EOF + + fi +echo $ac_n "checking for 'socklen_t'""... $ac_c" 1>&6 +echo "configure:2702: checking for 'socklen_t'" >&5 +if eval "test \"`echo '$''{'ac_cv_type_socklen_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < + #include + +int main() { + + socklen_t var; + var = 0; + +; return 0; } +EOF +if { (eval echo configure:2720: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_type_socklen_t=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_type_socklen_t=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_type_socklen_t" 1>&6 + if test "$ac_cv_type_socklen_t" = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_TYPE_SOCKLEN_T 1 +EOF + + fi + + + +# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works +# for constant arguments. Useless! +echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6 +echo "configure:2745: checking for working alloca.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +int main() { +char *p = alloca(2 * sizeof(int)); +; return 0; } +EOF +if { (eval echo configure:2757: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + ac_cv_header_alloca_h=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_header_alloca_h=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_header_alloca_h" 1>&6 +if test $ac_cv_header_alloca_h = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_ALLOCA_H 1 +EOF + +fi + +echo $ac_n "checking for alloca""... $ac_c" 1>&6 +echo "configure:2778: checking for alloca" >&5 +if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +# define alloca _alloca +# else +# if HAVE_ALLOCA_H +# include +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +char *alloca (); +# endif +# endif +# endif +# endif +#endif + +int main() { +char *p = (char *) alloca(1); +; return 0; } +EOF +if { (eval echo configure:2811: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + ac_cv_func_alloca_works=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_func_alloca_works=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_func_alloca_works" 1>&6 +if test $ac_cv_func_alloca_works = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_ALLOCA 1 +EOF + +fi + +if test $ac_cv_func_alloca_works = no; then + # The SVR3 libPW and SVR4 libucb both contain incompatible functions + # that cause trouble. Some versions do not even contain alloca or + # contain a buggy version. If you still want to use their alloca, + # use ar to extract alloca.o from them instead of compiling alloca.c. + ALLOCA=alloca.${ac_objext} + cat >> confdefs.h <<\EOF +#define C_ALLOCA 1 +EOF + + +echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6 +echo "configure:2843: checking whether alloca needs Cray hooks" >&5 +if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <&5 | + egrep "webecray" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_os_cray=yes +else + rm -rf conftest* + ac_cv_os_cray=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_os_cray" 1>&6 +if test $ac_cv_os_cray = yes; then +for ac_func in _getb67 GETB67 getb67; do + echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:2873: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:2901: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <&6 +fi + +done +fi + +echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6 +echo "configure:2928: checking stack direction for C alloca" >&5 +if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + ac_cv_c_stack_direction=0 +else + cat > conftest.$ac_ext < addr) ? 1 : -1; +} +main () +{ + exit (find_stack_direction() < 0); +} +EOF +if { (eval echo configure:2955: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + ac_cv_c_stack_direction=1 +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_c_stack_direction=-1 +fi +rm -fr conftest* +fi + +fi + +echo "$ac_t""$ac_cv_c_stack_direction" 1>&6 +cat >> confdefs.h <&6 +echo "configure:2979: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:3007: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + +for ac_func in mkstemp +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:3034: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:3062: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + +for ac_func in tempnam +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:3089: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:3117: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + + + + +AR='ar' +FLAGS_COMMON="-DPLATFORM_UNIX=1 -D__PALMOS_TRAPS__=0 -DEMULATION_LEVEL=EMULATION_UNIX" + + + +_WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -fexceptions -Wall -Wno-multichar -Wno-unknown-pragmas -Wno-conversion" +_WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -fexceptions -Wall -Wno-multichar -Wno-unknown-pragmas -Wno-conversion" + +_COMPILER_CFLAGS="${_COMPILER_CFLAGS}" +_COMPILER_CXXFLAGS="${_COMPILER_CXXFLAGS}" + + + +THREAD_FLAGS="-D_REENTRANT -DNoNanoSleep -DPthreadDraftVersion=10" +THREAD_LIBS="-lpthread" +USE_SOLARIS_CPP="false" + + + +case "$target" in +*-aix*) + THREAD_FLAGS="-DNoNanoSleep -DPthreadDraftVersion=8" + THREAD_LIBS="-lpthread" + ;; + +*-hpux*) + THREAD_FLAGS="-D_REENTRANT -DPthreadDraftVersion=4" + THREAD_LIBS="-lpthread -lmach -lc_r" + ;; + +*-irix*) + THREAD_FLAGS="-DUsePthread -D_REENTRANT -DPthreadDraftVersion=10 -DPthreadSupportThreadPriority" + THREAD_LIBS="-lpthread" + ;; + +*-linux*) + THREAD_FLAGS="-D_REENTRANT -DNoNanoSleep -DPthreadDraftVersion=10" + THREAD_LIBS="-lpthread" + ;; + +*-nto*) + THREAD_FLAGS="-D_REENTRANT -DPthreadDraftVersion=10" + THREAD_LIBS="" + POSER_CFLAGS="$POSER_CFLAGS -D_QNX_SOURCE -D_POSIX_SOURCE -D__i386__ -D_i386 -DNSCAP_NO_EXPLICIT -DNO_REGEX -DSTRINGS_ALIGNED -D_SEEKPOS_DEFINED_ -I/usr/gcc/lib/gcc-lib/ntox86/2.8.1/include" + POSER_CXXFLAGS="$POSER_CFLAGS" + _WARNINGS_CFLAGS='-w' + _WARNINGS_CXXFLAGS='-w' + LIBS="$LIBS -lsocket" + poser_optimize="-O2" + poser_debug="-gdwarf-2" + AR='/usr/local/bin/ar.elf' + ;; + +*-osf*) + THREAD_FLAGS="-D_REENTRANT -pthread -DNoNanoSleep -DPthreadDraftVersion=10" + THREAD_LIBS="-lcma" + ;; + +*-solaris*) + # -g somehow helps the assembler understand long symbol names + THREAD_FLAGS="-g -D_REENTRANT -DPthreadDraftVersion=10 -DPthreadSupportThreadPriority" + THREAD_LIBS="-lnsl -lsocket -lthread -lposix4" + _COMPILER_CFLAGS="${_COMPILER_CFLAGS} -fpermissive" + _COMPILER_CXXFLAGS="${_COMPILER_CXXFLAGS} -fpermissive" + USE_SOLARIS_CPP="true" + ;; + +*-sunos*) + # -g somehow helps the assembler understand long symbol names + THREAD_FLAGS="-g -D_REENTRANT -DPthreadDraftVersion=10 -DPthreadSupportThreadPriority" + THREAD_LIBS="-lnsl -lsocket -lthread -lposix4" + USE_SOLARIS_CPP="true" + ;; + +*-freebsd*) + THREAD_FLAGS="-pthread -D_THREAD_SAFE -D_REENTRANT -DPthreadDraftVersion=10" + THREAD_LIBS= + ;; + +*-bsdi4*) + THREAD_LIBS= + ;; +esac + + + +# Check whether --enable-profile or --disable-profile was given. +if test "${enable_profile+set}" = set; then + enableval="$enable_profile" + FLAGS_PROFILE="-pg" +else + FLAGS_PROFILE="" +fi + + + + +# Check whether --enable-palm_profile or --disable-palm_profile was given. +if test "${enable_palm_profile+set}" = set; then + enableval="$enable_palm_profile" + FLAGS_PALM_PROFILE="-DHAS_PROFILING=1" +else + FLAGS_PALM_PROFILE="-DHAS_PROFILING=0" +fi + + + + +# Check whether --enable-static-link or --disable-static-link was given. +if test "${enable_static_link+set}" = set; then + enableval="$enable_static_link" + LDFLAGS="${LDFLAGS} -static" + +fi + + + + + +FLAGS_OPTIMIZE="-O2" + + + +ac_ext=C +# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cxx_cross + +echo $ac_n "checking whether virtual function default arguments work""... $ac_c" 1>&6 +echo "configure:3275: checking whether virtual function default arguments work" >&5 +if eval "test \"`echo '$''{'pose_cv_virtual_defarg_ok'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <foo ()); + +int main() { +bar (); +; return 0; } +EOF +if { (eval echo configure:3294: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + pose_cv_virtual_defarg_ok=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + pose_cv_virtual_defarg_ok=no +fi +rm -f conftest* +fi + +echo "$ac_t""$pose_cv_virtual_defarg_ok" 1>&6 + +if test $pose_cv_virtual_defarg_ok = no; then + cat >> confdefs.h <<\EOF +#define BROKEN_VIRTUAL_DEFAULT_ARGUMENTS 1 +EOF + +fi + + + +# Check whether --enable-debug or --disable-debug was given. +if test "${enable_debug+set}" = set; then + enableval="$enable_debug" + FLAGS_DEBUG="-D_DEBUG -g" + FLAGS_PROFILE="-DHAS_PROFILING=1" + FLAGS_PALM_PROFILE="" + FLAGS_OPTIMIZE="" +else + FLAGS_DEBUG="-DNDEBUG" +fi + + + + +GLLIB= + +echo $ac_n "checking how to run the C++ preprocessor""... $ac_c" 1>&6 +echo "configure:3334: checking how to run the C++ preprocessor" >&5 +if test -z "$CXXCPP"; then +if eval "test \"`echo '$''{'ac_cv_prog_CXXCPP'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_ext=C +# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cxx_cross + CXXCPP="${CXX-g++} -E" + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:3352: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CXXCPP=/lib/cpp +fi +rm -f conftest* + ac_cv_prog_CXXCPP="$CXXCPP" +ac_ext=C +# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cxx_cross +fi +fi +CXXCPP="$ac_cv_prog_CXXCPP" +echo "$ac_t""$CXXCPP" 1>&6 + +ac_safe=`echo "GL/gl.h" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for GL/gl.h""... $ac_c" 1>&6 +echo "configure:3378: checking for GL/gl.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:3388: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + echo $ac_n "checking for glXMakeCurrent in -lGL""... $ac_c" 1>&6 +echo "configure:3405: checking for glXMakeCurrent in -lGL" >&5 +ac_lib_var=`echo GL'_'glXMakeCurrent | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lGL \ + -L${ac_x_libraries} -lX11 -lXext $X_EXTRA_LIBS -lm $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<\EOF +#define HAVE_GL 1 +EOF + GLLIB="-lGL" +else + echo "$ac_t""no" 1>&6 +\ + echo $ac_n "checking for glXMakeCurrent in -lMesaGL""... $ac_c" 1>&6 +echo "configure:3451: checking for glXMakeCurrent in -lMesaGL" >&5 +ac_lib_var=`echo MesaGL'_'glXMakeCurrent | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lMesaGL \ + -L${ac_x_libraries} -lX11 -lXext $X_EXTRA_LIBS -lm $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<\EOF +#define HAVE_GL 1 +EOF + GLLIB=" -lMesaGL" +else + echo "$ac_t""no" 1>&6 +fi + +fi + + +else + echo "$ac_t""no" 1>&6 +fi + + +ac_safe=`echo "GL/glu.h" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for GL/glu.h""... $ac_c" 1>&6 +echo "configure:3507: checking for GL/glu.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:3517: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<\EOF +#define HAVE_GL_GLU_H 1 +EOF + + if test x$ac_cv_lib_GL_glXMakeCurrent = xyes; then + GLLIB="-lGLU $GLLIB" + fi + if test x$ac_cv_lib_MesaGL_glXMakeCurrent = xyes; then + GLLIB="-lMesaGLU $GLLIB" + fi + +else + echo "$ac_t""no" 1>&6 +fi + + + + + + +cat > confcache <<\EOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +(set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + + +save_LIBS="$LIBS" +LIBS="-lfltk ${GLLIB} -L${ac_x_libraries} -lXext -lX11 -lm $X_EXTRA_LIBS $LIBS" + +ac_ext=C +# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cxx_cross + +echo $ac_n "checking for 'int fl_height (void)' in -lfltk""... $ac_c" 1>&6 +echo "configure:3612: checking for 'int fl_height (void)' in -lfltk" >&5 +if eval "test \"`echo '$''{'pose_cv_lib_fltk_found'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +int main() { +fl_height (); +; return 0; } +EOF +if { (eval echo configure:3624: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + pose_cv_lib_fltk_found=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + pose_cv_lib_fltk_found=no +fi +rm -f conftest* +fi + +echo "$ac_t""$pose_cv_lib_fltk_found" 1>&6 + +LIBS="$save_LIBS" + +if test $pose_cv_lib_fltk_found = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_LIBFLTK 1 +EOF + +else + { echo "configure: error: *** FLTK *must* be installed before running configure. ***" 1>&2; exit 1; } +fi + + + +FLAGS="$FLAGS_COMMON $FLAGS_OPTIMIZE $FLAGS_PROFILE $FLAGS_PALM_PROFILE $FLAGS_DEBUG" +POSER_CFLAGS="$POSER_CFLAGS $FLAGS $_WARNINGS_CFLAGS $_COMPILER_CFLAGS" +POSER_CXXFLAGS="$POSER_CXXFLAGS $FLAGS $_WARNINGS_CXXFLAGS $_COMPILER_CXXFLAGS" + + + + + + + + + + + + +if test x$USE_SOLARIS_CPP = xtrue; then + SOLARIS_TRUE= + SOLARIS_FALSE='#' +else + SOLARIS_TRUE='#' + SOLARIS_FALSE= +fi + +trap '' 1 2 15 +cat > confcache <<\EOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +(set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Any assignment to VPATH causes Sun make to only execute +# the first set of double-colon rules, so remove it if not needed. +# If there is a colon in the path, we need to keep it. +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' +fi + +trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 + +# Transform confdefs.h into DEFS. +# Protect against shell expansion while executing Makefile rules. +# Protect against Makefile macro expansion. +cat > conftest.defs <<\EOF +s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g +s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g +s%\[%\\&%g +s%\]%\\&%g +s%\$%$$%g +EOF +DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '` +rm -f conftest.defs + + +# Without the "./", some shells look in PATH for config.status. +: ${CONFIG_STATUS=./config.status} + +echo creating $CONFIG_STATUS +rm -f $CONFIG_STATUS +cat > $CONFIG_STATUS </dev/null | sed 1q`: +# +# $0 $ac_configure_args +# +# Compiler output produced by configure, useful for debugging +# configure, is in ./config.log if it exists. + +ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" +for ac_option +do + case "\$ac_option" in + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" + exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; + -version | --version | --versio | --versi | --vers | --ver | --ve | --v) + echo "$CONFIG_STATUS generated by autoconf version 2.13" + exit 0 ;; + -help | --help | --hel | --he | --h) + echo "\$ac_cs_usage"; exit 0 ;; + *) echo "\$ac_cs_usage"; exit 1 ;; + esac +done + +ac_given_srcdir=$srcdir +ac_given_INSTALL="$INSTALL" + +trap 'rm -fr `echo "Makefile Gzip/Makefile jpeg/Makefile espws-2.0/Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +EOF +cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF +$ac_vpsub +$extrasub +s%@SHELL@%$SHELL%g +s%@CFLAGS@%$CFLAGS%g +s%@CPPFLAGS@%$CPPFLAGS%g +s%@CXXFLAGS@%$CXXFLAGS%g +s%@FFLAGS@%$FFLAGS%g +s%@DEFS@%$DEFS%g +s%@LDFLAGS@%$LDFLAGS%g +s%@LIBS@%$LIBS%g +s%@exec_prefix@%$exec_prefix%g +s%@prefix@%$prefix%g +s%@program_transform_name@%$program_transform_name%g +s%@bindir@%$bindir%g +s%@sbindir@%$sbindir%g +s%@libexecdir@%$libexecdir%g +s%@datadir@%$datadir%g +s%@sysconfdir@%$sysconfdir%g +s%@sharedstatedir@%$sharedstatedir%g +s%@localstatedir@%$localstatedir%g +s%@libdir@%$libdir%g +s%@includedir@%$includedir%g +s%@oldincludedir@%$oldincludedir%g +s%@infodir@%$infodir%g +s%@mandir@%$mandir%g +s%@host@%$host%g +s%@host_alias@%$host_alias%g +s%@host_cpu@%$host_cpu%g +s%@host_vendor@%$host_vendor%g +s%@host_os@%$host_os%g +s%@target@%$target%g +s%@target_alias@%$target_alias%g +s%@target_cpu@%$target_cpu%g +s%@target_vendor@%$target_vendor%g +s%@target_os@%$target_os%g +s%@build@%$build%g +s%@build_alias@%$build_alias%g +s%@build_cpu@%$build_cpu%g +s%@build_vendor@%$build_vendor%g +s%@build_os@%$build_os%g +s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g +s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g +s%@INSTALL_DATA@%$INSTALL_DATA%g +s%@PACKAGE@%$PACKAGE%g +s%@VERSION@%$VERSION%g +s%@ACLOCAL@%$ACLOCAL%g +s%@AUTOCONF@%$AUTOCONF%g +s%@AUTOMAKE@%$AUTOMAKE%g +s%@AUTOHEADER@%$AUTOHEADER%g +s%@MAKEINFO@%$MAKEINFO%g +s%@SET_MAKE@%$SET_MAKE%g +s%@CC@%$CC%g +s%@CXX@%$CXX%g +s%@RANLIB@%$RANLIB%g +s%@CPP@%$CPP%g +s%@X_CFLAGS@%$X_CFLAGS%g +s%@X_PRE_LIBS@%$X_PRE_LIBS%g +s%@X_LIBS@%$X_LIBS%g +s%@X_EXTRA_LIBS@%$X_EXTRA_LIBS%g +s%@ALLOCA@%$ALLOCA%g +s%@CXXCPP@%$CXXCPP%g +s%@GLLIB@%$GLLIB%g +s%@AR@%$AR%g +s%@POSER_CFLAGS@%$POSER_CFLAGS%g +s%@POSER_CXXFLAGS@%$POSER_CXXFLAGS%g +s%@THREAD_FLAGS@%$THREAD_FLAGS%g +s%@THREAD_LIBS@%$THREAD_LIBS%g +s%@THREAD_SRC@%$THREAD_SRC%g +s%@SOLARIS_TRUE@%$SOLARIS_TRUE%g +s%@SOLARIS_FALSE@%$SOLARIS_FALSE%g + +CEOF +EOF + +cat >> $CONFIG_STATUS <<\EOF + +# Split the substitutions into bite-sized pieces for seds with +# small command number limits, like on Digital OSF/1 and HP-UX. +ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. +ac_file=1 # Number of current file. +ac_beg=1 # First line for current file. +ac_end=$ac_max_sed_cmds # Line after last line for current file. +ac_more_lines=: +ac_sed_cmds="" +while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file + else + sed "${ac_end}q" conftest.subs > conftest.s$ac_file + fi + if test ! -s conftest.s$ac_file; then + ac_more_lines=false + rm -f conftest.s$ac_file + else + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f conftest.s$ac_file" + else + ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" + fi + ac_file=`expr $ac_file + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_cmds` + fi +done +if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat +fi +EOF + +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. + + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" + # A "../" for each directory in $ac_dir_suffix. + ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` + else + ac_dir_suffix= ac_dots= + fi + + case "$ac_given_srcdir" in + .) srcdir=. + if test -z "$ac_dots"; then top_srcdir=. + else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; + /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; + *) # Relative path. + srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" + top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + case "$ac_given_INSTALL" in + [/$]*) INSTALL="$ac_given_INSTALL" ;; + *) INSTALL="$ac_dots$ac_given_INSTALL" ;; + esac + + echo creating "$ac_file" + rm -f "$ac_file" + configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." + case "$ac_file" in + *Makefile*) ac_comsub="1i\\ +# $configure_input" ;; + *) ac_comsub= ;; + esac + + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + sed -e "$ac_comsub +s%@configure_input@%$configure_input%g +s%@srcdir@%$srcdir%g +s%@top_srcdir@%$top_srcdir%g +s%@INSTALL@%$INSTALL%g +" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file +fi; done +rm -f conftest.s* + +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF + +exit 0 +EOF +chmod +x $CONFIG_STATUS +rm -fr confdefs* $ac_clean_files +test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 + diff --git a/BuildUnix/configure.in b/BuildUnix/configure.in new file mode 100644 index 0000000..eda554f --- /dev/null +++ b/BuildUnix/configure.in @@ -0,0 +1,394 @@ +dnl ====================================================================================== +dnl Copyright (c) 1998-2001 Palm, Inc. or its subsidiaries. +dnl All rights reserved. +dnl ====================================================================================== + +dnl ======================================================== +dnl Process this file with autoconf to produce a configure script. +dnl ======================================================== + +AC_INIT(../SrcUnix/Platform_Unix.cpp) +AC_CANONICAL_SYSTEM +AM_INIT_AUTOMAKE(pose, 0, no) + +AC_PROG_MAKE_SET +AC_PROG_CC +AC_PROG_CXX +AC_PROG_RANLIB + + +dnl ======================================================== +dnl Check for programs. +dnl ======================================================== + +AC_PROG_CPP + + +dnl ======================================================== +dnl Check for libraries. +dnl ======================================================== + +AC_PATH_XTRA + +AC_ARG_WITH(fltk, + [ --with-fltk=DIR use FLTK in DIR], [ + CPPFLAGS="${CPPFLAGS} -I$withval/include" + LDFLAGS="${LDFLAGS} -L$withval/lib" +]) + + +dnl ======================================================== +dnl Check for header files. +dnl ======================================================== + +AC_HEADER_DIRENT +AC_HEADER_STDC +AC_CHECK_HEADERS(endian.h machine/endian.h sys/isa_defs.h fcntl.h limits.h strings.h sys/time.h unistd.h) + + +dnl ======================================================== +dnl Check for typedefs, structures, and compiler characteristics. +dnl ======================================================== + +AC_C_CONST +AC_C_INLINE + + +dnl ---------------------------- +dnl Check sa_len of sockaddr +dnl ---------------------------- + +AC_DEFUN(AC_STRUCT_SA_LEN, + [AC_CACHE_CHECK([for 'sa_len' in 'struct sockaddr'], ac_cv_struct_sa_len, + [AC_TRY_COMPILE([ + #include + #include + ], [ + struct sockaddr sa; + sa.sa_len = 0; + ], ac_cv_struct_sa_len=yes, ac_cv_struct_sa_len=no)]) + if test "$ac_cv_struct_sa_len" = yes; then + AC_DEFINE(HAVE_SA_LEN) + fi]) + +AC_DEFUN(AC_STRUCT_SIN_LEN, + [AC_CACHE_CHECK([for 'sin_len' in 'struct sockaddr_in'], ac_cv_struct_sin_len, + [AC_TRY_COMPILE([ + #include + #include + #include + ], [ + struct sockaddr_in sin; + sin.sin_len = 0; + ], ac_cv_struct_sin_len=yes, ac_cv_struct_sin_len=no)]) + if test "$ac_cv_struct_sin_len" = yes; then + AC_DEFINE(HAVE_SIN_LEN) + fi]) + +AC_DEFUN(AC_TYPE_SOCKLEN_T, + [AC_CACHE_CHECK([for 'socklen_t'], ac_cv_type_socklen_t, + [AC_TRY_COMPILE([ + #include + #include + ], [ + socklen_t var; + var = 0; + ], ac_cv_type_socklen_t=yes, ac_cv_type_socklen_t=no)]) + if test "$ac_cv_type_socklen_t" = yes; then + AC_DEFINE(HAVE_TYPE_SOCKLEN_T) + fi]) + +AC_STRUCT_SA_LEN +AC_STRUCT_SIN_LEN +AC_TYPE_SOCKLEN_T + + +dnl ======================================================== +dnl Check for library functions. +dnl ======================================================== + +AC_FUNC_ALLOCA +AC_CHECK_FUNCS(mkdir) +AC_CHECK_FUNCS(mkstemp) +AC_CHECK_FUNCS(tempnam) + + +dnl ======================================================== +dnl Set the defaults first +dnl ======================================================== + +AR='ar' +FLAGS_COMMON="-DPLATFORM_UNIX=1 -D__PALMOS_TRAPS__=0 -DEMULATION_LEVEL=EMULATION_UNIX" + + +dnl ======================================================== +dnl Define some standard warning flags +dnl ======================================================== + +_WARNINGS_CFLAGS="${_WARNINGS_CFLAGS} -fexceptions -Wall -Wno-multichar -Wno-unknown-pragmas -Wno-conversion" +_WARNINGS_CXXFLAGS="${_WARNINGS_CXXFLAGS} -fexceptions -Wall -Wno-multichar -Wno-unknown-pragmas -Wno-conversion" + +_COMPILER_CFLAGS="${_COMPILER_CFLAGS}" +_COMPILER_CXXFLAGS="${_COMPILER_CXXFLAGS}" + + +dnl ======================================================== +dnl Define the standard OMNITHREAD options +dnl ======================================================== + +THREAD_FLAGS="-D_REENTRANT -DNoNanoSleep -DPthreadDraftVersion=10" +THREAD_LIBS="-lpthread" +USE_SOLARIS_CPP="false" + + +dnl ======================================================== +dnl System overrides of the defaults +dnl ======================================================== + +case "$target" in +*-aix*) + THREAD_FLAGS="-DNoNanoSleep -DPthreadDraftVersion=8" + THREAD_LIBS="-lpthread" + ;; + +*-hpux*) + THREAD_FLAGS="-D_REENTRANT -DPthreadDraftVersion=4" + THREAD_LIBS="-lpthread -lmach -lc_r" + ;; + +*-irix*) + THREAD_FLAGS="-DUsePthread -D_REENTRANT -DPthreadDraftVersion=10 -DPthreadSupportThreadPriority" + THREAD_LIBS="-lpthread" + ;; + +*-linux*) + THREAD_FLAGS="-D_REENTRANT -DNoNanoSleep -DPthreadDraftVersion=10" + THREAD_LIBS="-lpthread" + ;; + +*-nto*) + THREAD_FLAGS="-D_REENTRANT -DPthreadDraftVersion=10" + THREAD_LIBS="" + POSER_CFLAGS="$POSER_CFLAGS -D_QNX_SOURCE -D_POSIX_SOURCE -D__i386__ -D_i386 -DNSCAP_NO_EXPLICIT -DNO_REGEX -DSTRINGS_ALIGNED -D_SEEKPOS_DEFINED_ -I/usr/gcc/lib/gcc-lib/ntox86/2.8.1/include" + POSER_CXXFLAGS="$POSER_CFLAGS" + _WARNINGS_CFLAGS='-w' + _WARNINGS_CXXFLAGS='-w' + LIBS="$LIBS -lsocket" + poser_optimize="-O2" + poser_debug="-gdwarf-2" + AR='/usr/local/bin/ar.elf' + ;; + +*-osf*) +dnl I am not sure how to test for these versions... +dnl Options for OSF 1.3.2 +dnl THREAD_FLAGS="-D_REENTRANT -DNoNanoSleep -DPthreadDraftVersion=4" +dnl THREAD_LIBS="-lpthread -lmach -lc_r" +dnl Options for OSF 1.4 + THREAD_FLAGS="-D_REENTRANT -pthread -DNoNanoSleep -DPthreadDraftVersion=10" + THREAD_LIBS="-lcma" + ;; + +*-solaris*) + # -g somehow helps the assembler understand long symbol names + THREAD_FLAGS="-g -D_REENTRANT -DPthreadDraftVersion=10 -DPthreadSupportThreadPriority" + THREAD_LIBS="-lnsl -lsocket -lthread -lposix4" +dnl I'd really like to check the compiler directly to see if it supports -fpermissive, +dnl but I don't know how to get autoconf to do that. + _COMPILER_CFLAGS="${_COMPILER_CFLAGS} -fpermissive" + _COMPILER_CXXFLAGS="${_COMPILER_CXXFLAGS} -fpermissive" + USE_SOLARIS_CPP="true" + ;; + +*-sunos*) + # -g somehow helps the assembler understand long symbol names + THREAD_FLAGS="-g -D_REENTRANT -DPthreadDraftVersion=10 -DPthreadSupportThreadPriority" + THREAD_LIBS="-lnsl -lsocket -lthread -lposix4" + USE_SOLARIS_CPP="true" + ;; + +*-freebsd*) + THREAD_FLAGS="-pthread -D_THREAD_SAFE -D_REENTRANT -DPthreadDraftVersion=10" + THREAD_LIBS= + ;; + +*-bsdi4*) + THREAD_LIBS= + ;; +esac + + +dnl ======================================================== +dnl Check for gprof profiling +dnl ======================================================== + +AC_ARG_ENABLE(profile, + [ --enable-profile include gprof profiling (default no)], + FLAGS_PROFILE="-pg", + FLAGS_PROFILE="") + + +dnl ======================================================== +dnl Check for built-in profiling +dnl ======================================================== + +AC_ARG_ENABLE(palm_profile, + [ --enable-palm-profile include profiling of Palm applications (default no)], + FLAGS_PALM_PROFILE="-DHAS_PROFILING=1", + FLAGS_PALM_PROFILE="-DHAS_PROFILING=0") + + +dnl ======================================================== +dnl Check for static link. +dnl ======================================================== + +AC_ARG_ENABLE(static-link, + [ --enable-static-link static link; no shared libraries (default no)], + LDFLAGS="${LDFLAGS} -static" +) + + +dnl ======================================================== +dnl Check for Optimize +dnl +dnl NOTE: turning on optimizations when using egcs 1.1.2 +dnl runs afoul of a code generation bug on x86's (as +dnl shipped with RedHat 6.0). The specific cases I know +dnl about (in SkinScaleDown and SkinScaleUp) are coded +dnl around, but there may be more lurking... +dnl +dnl I haven't checked this, but I hear the bug is fixed +dnl in gcc 2.95. +dnl ======================================================== + +dnl This is now on by default. It gets turned off if the +dnl user selects --enable-debug. +dnl +dnl AC_ARG_ENABLE(optimize, +dnl [ --enable-optimize optimize code (default no)], +dnl FLAGS_OPTIMIZE="-O2", +dnl FLAGS_OPTIMIZE="") + +FLAGS_OPTIMIZE="-O2" + + +dnl ======================================================== +dnl Check whether default arguments which call a virtual +dnl function in another object work -- GCC 2.95.x crashes +dnl trying to compile something like this. +dnl ======================================================== + +AC_LANG_CPLUSPLUS +AC_CACHE_CHECK([whether virtual function default arguments work], + pose_cv_virtual_defarg_ok, + AC_TRY_COMPILE([ + class C + { + public: + virtual int foo (); + } *c; + void bar (int = c->foo ()); + ], [bar ();], + pose_cv_virtual_defarg_ok=yes, pose_cv_virtual_defarg_ok=no)) + +if test $pose_cv_virtual_defarg_ok = no; then + AC_DEFINE(BROKEN_VIRTUAL_DEFAULT_ARGUMENTS) +fi + + +dnl ======================================================== +dnl Check for debugging +dnl ======================================================== + +AC_ARG_ENABLE(debug, + [ --enable-debug include debugging symbols (default no)], + FLAGS_DEBUG="-D_DEBUG -g" + FLAGS_PROFILE="-DHAS_PROFILING=1" + FLAGS_PALM_PROFILE="" + FLAGS_OPTIMIZE="", + FLAGS_DEBUG="-DNDEBUG") + + +dnl ======================================================== +dnl Check for OpenGL. This is pretty much the same code +dnl that FLTK uses to check for it. We'll assume that if +dnl OpenGL is present, FLTK was configured to use it, and +dnl so we need to link with it. +dnl ======================================================== + +GLLIB= + +AC_CHECK_HEADER(GL/gl.h, + AC_CHECK_LIB(GL, glXMakeCurrent, AC_DEFINE(HAVE_GL) GLLIB="-lGL", \ + AC_CHECK_LIB(MesaGL, glXMakeCurrent, AC_DEFINE(HAVE_GL) GLLIB=" -lMesaGL",,\ + -L${ac_x_libraries} -lX11 -lXext $X_EXTRA_LIBS -lm), \ + -L${ac_x_libraries} -lX11 -lXext $X_EXTRA_LIBS -lm) +) + +AC_CHECK_HEADER(GL/glu.h, + AC_DEFINE(HAVE_GL_GLU_H) + if test x$ac_cv_lib_GL_glXMakeCurrent = xyes; then + GLLIB="-lGLU $GLLIB" + fi + if test x$ac_cv_lib_MesaGL_glXMakeCurrent = xyes; then + GLLIB="-lMesaGLU $GLLIB" + fi +) + +AC_SUBST(GLLIB) + + +dnl ======================================================== +dnl Make sure FLTK is available. It must be installed on +dnl a standard path, or on $x_libraries. +dnl ======================================================== + +AC_CACHE_SAVE + +dnl Temporarily add -lfltk and OTHER-LIBRARIES (cf AC_CHECK_LIB) to $LIBS +save_LIBS="$LIBS" +LIBS="-lfltk ${GLLIB} -L${ac_x_libraries} -lXext -lX11 -lm $X_EXTRA_LIBS $LIBS" + +AC_LANG_CPLUSPLUS +AC_CACHE_CHECK([for 'int fl_height (void)' in -lfltk], pose_cv_lib_fltk_found, + AC_TRY_LINK([#include ], [fl_height ();], + pose_cv_lib_fltk_found=yes, pose_cv_lib_fltk_found=no)) + +LIBS="$save_LIBS" + +if test $pose_cv_lib_fltk_found = yes; then + AC_DEFINE(HAVE_LIBFLTK) +else + AC_MSG_ERROR(*** FLTK *must* be installed before running configure. ***) +fi + + +dnl ======================================================== +dnl = Append the FLAGS variable that contains options for +dnl = debug, profiling and optimizing poser. +dnl ======================================================== + +FLAGS="$FLAGS_COMMON $FLAGS_OPTIMIZE $FLAGS_PROFILE $FLAGS_PALM_PROFILE $FLAGS_DEBUG" +POSER_CFLAGS="$POSER_CFLAGS $FLAGS $_WARNINGS_CFLAGS $_COMPILER_CFLAGS" +POSER_CXXFLAGS="$POSER_CXXFLAGS $FLAGS $_WARNINGS_CXXFLAGS $_COMPILER_CXXFLAGS" + +AC_SUBST(AR) +AC_SUBST(POSER_CFLAGS) +AC_SUBST(POSER_CXXFLAGS) +AC_SUBST(THREAD_FLAGS) +AC_SUBST(THREAD_LIBS) +AC_SUBST(THREAD_SRC) + + +dnl ======================================================== +dnl Determine which file to use for threading support. NB: +dnl this may be obvious to most UNIX hacks, but it's very +dnl important to put spaces around the '='. I didn't do +dnl that the first time, and I guess "test" needs those +dnl in order to know that '=' is an operator. Without the +dnl spaces, I got incorrect results. +dnl ======================================================== + +AM_CONDITIONAL(SOLARIS, test x$USE_SOLARIS_CPP = xtrue) + +AC_OUTPUT(Makefile Gzip/Makefile jpeg/Makefile espws-2.0/Makefile) diff --git a/BuildUnix/espws-2.0/Makefile.am b/BuildUnix/espws-2.0/Makefile.am new file mode 100644 index 0000000..b52a443 --- /dev/null +++ b/BuildUnix/espws-2.0/Makefile.am @@ -0,0 +1,33 @@ +## -*- mode: Makefile; tab-width: 4; -*- +## ====================================================================================== +## Copyright (c) 2000-2001 Palm, Inc. or its subsidiaries. +## All rights reserved. +## ====================================================================================== + +## +## makefile.am for poser-specific espws code +## +SUFFIXES = .cxx + +VPATH = $(srcdir)/../../SrcUnix/espws-2.0: + +CFLAGS = $(POSER_CFLAGS) $(LOCAL_CFLAGS) $(X_CFLAGS) +CXXFLAGS = $(POSER_CXXFLAGS) $(LOCAL_CFLAGS) $(X_CFLAGS) + +INCLUDES = -I$(srddir)/../../SrcUnix/espws-2.0 + +noinst_LIBRARIES = libposerespws.a + +SRC_ESPWS = CheckButton.cxx \ + FileBrowser.cxx \ + FileChooser.cxx \ + FileChooser2.cxx \ + FileIcon.cxx \ + FileInput.cxx \ + Fl_Wizard.cxx \ + HelpApp.cxx \ + HelpApp2.cxx \ + HelpDialog.cxx \ + HelpView.cxx + +libposerespws_a_SOURCES = $(SRC_ESPWS) diff --git a/BuildUnix/espws-2.0/Makefile.in b/BuildUnix/espws-2.0/Makefile.in new file mode 100644 index 0000000..c148251 --- /dev/null +++ b/BuildUnix/espws-2.0/Makefile.in @@ -0,0 +1,348 @@ +# Makefile.in generated automatically by automake 1.4a from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_FLAG = +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_alias = @build_alias@ +build_triplet = @build@ +host_alias = @host_alias@ +host_triplet = @host@ +target_alias = @target_alias@ +target_triplet = @target@ +AR = @AR@ +CC = @CC@ +CPP = @CPP@ +CXX = @CXX@ +GLLIB = @GLLIB@ +MAKEINFO = @MAKEINFO@ +PACKAGE = @PACKAGE@ +POSER_CFLAGS = @POSER_CFLAGS@ +POSER_CXXFLAGS = @POSER_CXXFLAGS@ +RANLIB = @RANLIB@ +THREAD_FLAGS = @THREAD_FLAGS@ +THREAD_LIBS = @THREAD_LIBS@ +THREAD_SRC = @THREAD_SRC@ +VERSION = @VERSION@ + +SUFFIXES = .cxx + +VPATH = $(srcdir)/../../SrcUnix/espws-2.0: + +CFLAGS = $(POSER_CFLAGS) $(LOCAL_CFLAGS) $(X_CFLAGS) +CXXFLAGS = $(POSER_CXXFLAGS) $(LOCAL_CFLAGS) $(X_CFLAGS) + +INCLUDES = -I$(srddir)/../../SrcUnix/espws-2.0 + +noinst_LIBRARIES = libposerespws.a + +SRC_ESPWS = CheckButton.cxx FileBrowser.cxx FileChooser.cxx FileChooser2.cxx FileIcon.cxx FileInput.cxx Fl_Wizard.cxx HelpApp.cxx HelpApp2.cxx HelpDialog.cxx HelpView.cxx + + +libposerespws_a_SOURCES = $(SRC_ESPWS) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_CLEAN_FILES = +LIBRARIES = $(noinst_LIBRARIES) + + +DEFS = @DEFS@ -I. -I$(srcdir) +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +X_CFLAGS = @X_CFLAGS@ +X_LIBS = @X_LIBS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +libposerespws_a_LIBADD = +libposerespws_a_OBJECTS = CheckButton.o FileBrowser.o FileChooser.o \ +FileChooser2.o FileIcon.o FileInput.o Fl_Wizard.o HelpApp.o HelpApp2.o \ +HelpDialog.o HelpView.o +CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ +DIST_COMMON = Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = gtar +GZIP_ENV = --best +DEP_FILES = .deps/CheckButton.P .deps/FileBrowser.P .deps/FileChooser.P \ +.deps/FileChooser2.P .deps/FileIcon.P .deps/FileInput.P \ +.deps/Fl_Wizard.P .deps/HelpApp.P .deps/HelpApp2.P .deps/HelpDialog.P \ +.deps/HelpView.P +SOURCES = $(libposerespws_a_SOURCES) +OBJECTS = $(libposerespws_a_OBJECTS) + +all: all-redirect +.SUFFIXES: +.SUFFIXES: .S .c .cxx .o .s +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --foreign espws-2.0/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +mostlyclean-noinstLIBRARIES: + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) + +distclean-noinstLIBRARIES: + +maintainer-clean-noinstLIBRARIES: + +.s.o: + $(COMPILE) -c $< + +.S.o: + $(COMPILE) -c $< + +mostlyclean-compile: + -rm -f *.o core *.core + +clean-compile: + +distclean-compile: + -rm -f *.tab.c + +maintainer-clean-compile: + +libposerespws.a: $(libposerespws_a_OBJECTS) $(libposerespws_a_DEPENDENCIES) + -rm -f libposerespws.a + $(AR) cru libposerespws.a $(libposerespws_a_OBJECTS) $(libposerespws_a_LIBADD) + $(RANLIB) libposerespws.a +.cxx.o: + $(CXXCOMPILE) -c $< + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = espws-2.0 + +distdir: $(DISTFILES) + here=`cd $(top_builddir) && pwd`; \ + top_distdir=`cd $(top_distdir) && pwd`; \ + distdir=`cd $(distdir) && pwd`; \ + cd $(top_srcdir) \ + && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign espws-2.0/Makefile + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$d/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done + +DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) + +-include $(DEP_FILES) + +mostlyclean-depend: + +clean-depend: + +distclean-depend: + -rm -rf .deps + +maintainer-clean-depend: + +%.o: %.c + @echo '$(COMPILE) -c $<'; \ + $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-cp .deps/$(*F).pp .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm .deps/$(*F).pp + +%.lo: %.c + @echo '$(LTCOMPILE) -c $<'; \ + $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ + < .deps/$(*F).pp > .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm -f .deps/$(*F).pp + +%.o: %.cxx + @echo '$(CXXCOMPILE) -c $<'; \ + $(CXXCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-cp .deps/$(*F).pp .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm .deps/$(*F).pp + +%.lo: %.cxx + @echo '$(LTCXXCOMPILE) -c $<'; \ + $(LTCXXCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ + < .deps/$(*F).pp > .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm -f .deps/$(*F).pp +info-am: +info: info-am +dvi-am: +dvi: dvi-am +check-am: all-am +check: check-am +installcheck-am: +installcheck: installcheck-am +install-exec-am: +install-exec: install-exec-am + +install-data-am: +install-data: install-data-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-am +uninstall-am: +uninstall: uninstall-am +all-am: Makefile $(LIBRARIES) +all-redirect: all-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install +installdirs: + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-noinstLIBRARIES mostlyclean-compile \ + mostlyclean-tags mostlyclean-depend mostlyclean-generic + +mostlyclean: mostlyclean-am + +clean-am: clean-noinstLIBRARIES clean-compile clean-tags clean-depend \ + clean-generic mostlyclean-am + +clean: clean-am + +distclean-am: distclean-noinstLIBRARIES distclean-compile \ + distclean-tags distclean-depend distclean-generic \ + clean-am + +distclean: distclean-am + +maintainer-clean-am: maintainer-clean-noinstLIBRARIES \ + maintainer-clean-compile maintainer-clean-tags \ + maintainer-clean-depend maintainer-clean-generic \ + distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-am + +.PHONY: mostlyclean-noinstLIBRARIES distclean-noinstLIBRARIES \ +clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \ +mostlyclean-compile distclean-compile clean-compile \ +maintainer-clean-compile tags mostlyclean-tags distclean-tags \ +clean-tags maintainer-clean-tags distdir mostlyclean-depend \ +distclean-depend clean-depend maintainer-clean-depend info-am info \ +dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ +install-exec install-data-am install-data install-am install \ +uninstall-am uninstall all-redirect all-am all installdirs \ +mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/BuildUnix/install-sh b/BuildUnix/install-sh new file mode 100755 index 0000000..e843669 --- /dev/null +++ b/BuildUnix/install-sh @@ -0,0 +1,250 @@ +#!/bin/sh +# +# install - install a program, script, or datafile +# This comes from X11R5 (mit/util/scripts/install.sh). +# +# Copyright 1991 by the Massachusetts Institute of Technology +# +# 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, and that the name of M.I.T. not be used in advertising or +# publicity pertaining to distribution of the software without specific, +# written prior permission. M.I.T. makes no representations about the +# suitability of this software for any purpose. It is provided "as is" +# without express or implied warranty. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. It can only install one file at a time, a restriction +# shared with many OS's install programs. + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +transformbasename="" +transform_arg="" +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" +dir_arg="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd="$cpprog" + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd="$stripprog" + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "install: no input file specified" + exit 1 +else + true +fi + +if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d $dst ]; then + instcmd=: + else + instcmd=mkdir + fi +else + +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command +# might cause directories to be created, which would be especially bad +# if $src (and thus $dsttmp) contains '*'. + + if [ -f $src -o -d $src ] + then + true + else + echo "install: $src does not exist" + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "install: no destination specified" + exit 1 + else + true + fi + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + + if [ -d $dst ] + then + dst="$dst"/`basename $src` + else + true + fi +fi + +## this sed command emulates the dirname command +dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +# Make sure that the destination directory exists. +# this part is taken from Noah Friedman's mkinstalldirs script + +# Skip lots of stat calls in the usual case. +if [ ! -d "$dstdir" ]; then +defaultIFS=' +' +IFS="${IFS-${defaultIFS}}" + +oIFS="${IFS}" +# Some sh's can't handle IFS=/ for some reason. +IFS='%' +set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` +IFS="${oIFS}" + +pathcomp='' + +while [ $# -ne 0 ] ; do + pathcomp="${pathcomp}${1}" + shift + + if [ ! -d "${pathcomp}" ] ; + then + $mkdirprog "${pathcomp}" + else + true + fi + + pathcomp="${pathcomp}/" +done +fi + +if [ x"$dir_arg" != x ] +then + $doit $instcmd $dst && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi +else + +# If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename $dst` + else + dstfile=`basename $dst $transformbasename | + sed $transformarg`$transformbasename + fi + +# don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename $dst` + else + true + fi + +# Make a temp file name in the proper directory. + + dsttmp=$dstdir/#inst.$$# + +# Move or copy the file name to the temp name + + $doit $instcmd $src $dsttmp && + + trap "rm -f ${dsttmp}" 0 && + +# and set any options; do chmod last to preserve setuid bits + +# If any of these fail, we abort the whole thing. If we want to +# ignore errors from any of these, just make sure not to ignore +# errors from the above "$doit $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && + +# Now rename the file to the real destination. + + $doit $rmcmd -f $dstdir/$dstfile && + $doit $mvcmd $dsttmp $dstdir/$dstfile + +fi && + + +exit 0 diff --git a/BuildUnix/jpeg/Makefile.am b/BuildUnix/jpeg/Makefile.am new file mode 100644 index 0000000..7f2bec6 --- /dev/null +++ b/BuildUnix/jpeg/Makefile.am @@ -0,0 +1,84 @@ +## -*- mode: Makefile; tab-width: 4; -*- +## ====================================================================================== +## Copyright (c) 1999-2001 Palm, Inc. or its subsidiaries. +## All rights reserved. +## ====================================================================================== + +## +## makefile.am for poser-specific jpeg code +## +SUFFIXES = .cpp + +VPATH = $(srcdir)/../../SrcShared/jpeg: + +## no subdir specific flags needed -- just go with globals +LOCAL_CFLAGS = + +CFLAGS = $(POSER_CFLAGS) $(LOCAL_CFLAGS) +CXXFLAGS = $(POSER_CXXFLAGS) $(LOCAL_CFLAGS) + +INCLUDES = -I$(srcdir)/../../SrcShared/jpeg \ + -I$(srcdir)/../../SrcUnix + +noinst_LIBRARIES = libposerjpeg.a + +SRC_JPEG = cderror.h \ + jcapimin.c \ + jcapistd.c \ + jccoefct.c \ + jccolor.c \ + jcdctmgr.c \ + jchuff.c \ + jchuff.h \ + jcinit.c \ + jcmainct.c \ + jcmarker.c \ + jcmaster.c \ + jcomapi.c \ + jconfig.h \ + jcparam.c \ + jcphuff.c \ + jcprepct.c \ + jcsample.c \ + jctrans.c \ + jdapimin.c \ + jdapistd.c \ + jdatadst.c \ + jdatasrc.c \ + jdcoefct.c \ + jdcolor.c \ + jdct.h \ + jddctmgr.c \ + jdhuff.c \ + jdhuff.h \ + jdinput.c \ + jdmainct.c \ + jdmarker.c \ + jdmaster.c \ + jdmerge.c \ + jdphuff.c \ + jdpostct.c \ + jdsample.c \ + jdtrans.c \ + jerror.c \ + jerror.h \ + jfdctflt.c \ + jfdctfst.c \ + jfdctint.c \ + jidctflt.c \ + jidctfst.c \ + jidctint.c \ + jidctred.c \ + jinclude.h \ + jmemmgr.c \ + jmemnobs.c \ + jmemsys.h \ + jmorecfg.h \ + jpegint.h \ + jpeglib.h \ + jquant1.c \ + jquant2.c \ + jutils.c \ + jversion.h + +libposerjpeg_a_SOURCES = $(SRC_JPEG) diff --git a/BuildUnix/jpeg/Makefile.in b/BuildUnix/jpeg/Makefile.in new file mode 100644 index 0000000..9b0c1e1 --- /dev/null +++ b/BuildUnix/jpeg/Makefile.in @@ -0,0 +1,343 @@ +# Makefile.in generated automatically by automake 1.4a from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_FLAG = +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_alias = @build_alias@ +build_triplet = @build@ +host_alias = @host_alias@ +host_triplet = @host@ +target_alias = @target_alias@ +target_triplet = @target@ +AR = @AR@ +CC = @CC@ +CPP = @CPP@ +CXX = @CXX@ +GLLIB = @GLLIB@ +MAKEINFO = @MAKEINFO@ +PACKAGE = @PACKAGE@ +POSER_CFLAGS = @POSER_CFLAGS@ +POSER_CXXFLAGS = @POSER_CXXFLAGS@ +RANLIB = @RANLIB@ +THREAD_FLAGS = @THREAD_FLAGS@ +THREAD_LIBS = @THREAD_LIBS@ +THREAD_SRC = @THREAD_SRC@ +VERSION = @VERSION@ + +SUFFIXES = .cpp + +VPATH = $(srcdir)/../../SrcShared/jpeg: + +LOCAL_CFLAGS = + +CFLAGS = $(POSER_CFLAGS) $(LOCAL_CFLAGS) +CXXFLAGS = $(POSER_CXXFLAGS) $(LOCAL_CFLAGS) + +INCLUDES = -I$(srcdir)/../../SrcShared/jpeg -I$(srcdir)/../../SrcUnix + + +noinst_LIBRARIES = libposerjpeg.a + +SRC_JPEG = cderror.h jcapimin.c jcapistd.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c jchuff.h jcinit.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jconfig.h jcparam.c jcphuff.c jcprepct.c jcsample.c jctrans.c jdapimin.c jdapistd.c jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c jdct.h jddctmgr.c jdhuff.c jdhuff.h jdinput.c jdmainct.c jdmarker.c jdmaster.c jdmerge.c jdphuff.c jdpostct.c jdsample.c jdtrans.c jerror.c jerror.h jfdctflt.c jfdctfst.c jfdctint.c jidctflt.c jidctfst.c jidctint.c jidctred.c jinclude.h jmemmgr.c jmemnobs.c jmemsys.h jmorecfg.h jpegint.h jpeglib.h jquant1.c jquant2.c jutils.c jversion.h + + +libposerjpeg_a_SOURCES = $(SRC_JPEG) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_CLEAN_FILES = +LIBRARIES = $(noinst_LIBRARIES) + + +DEFS = @DEFS@ -I. -I$(srcdir) +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +X_CFLAGS = @X_CFLAGS@ +X_LIBS = @X_LIBS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +libposerjpeg_a_LIBADD = +libposerjpeg_a_OBJECTS = jcapimin.o jcapistd.o jccoefct.o jccolor.o \ +jcdctmgr.o jchuff.o jcinit.o jcmainct.o jcmarker.o jcmaster.o jcomapi.o \ +jcparam.o jcphuff.o jcprepct.o jcsample.o jctrans.o jdapimin.o \ +jdapistd.o jdatadst.o jdatasrc.o jdcoefct.o jdcolor.o jddctmgr.o \ +jdhuff.o jdinput.o jdmainct.o jdmarker.o jdmaster.o jdmerge.o jdphuff.o \ +jdpostct.o jdsample.o jdtrans.o jerror.o jfdctflt.o jfdctfst.o \ +jfdctint.o jidctflt.o jidctfst.o jidctint.o jidctred.o jmemmgr.o \ +jmemnobs.o jquant1.o jquant2.o jutils.o +COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ +DIST_COMMON = Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = gtar +GZIP_ENV = --best +DEP_FILES = .deps/jcapimin.P .deps/jcapistd.P .deps/jccoefct.P \ +.deps/jccolor.P .deps/jcdctmgr.P .deps/jchuff.P .deps/jcinit.P \ +.deps/jcmainct.P .deps/jcmarker.P .deps/jcmaster.P .deps/jcomapi.P \ +.deps/jcparam.P .deps/jcphuff.P .deps/jcprepct.P .deps/jcsample.P \ +.deps/jctrans.P .deps/jdapimin.P .deps/jdapistd.P .deps/jdatadst.P \ +.deps/jdatasrc.P .deps/jdcoefct.P .deps/jdcolor.P .deps/jddctmgr.P \ +.deps/jdhuff.P .deps/jdinput.P .deps/jdmainct.P .deps/jdmarker.P \ +.deps/jdmaster.P .deps/jdmerge.P .deps/jdphuff.P .deps/jdpostct.P \ +.deps/jdsample.P .deps/jdtrans.P .deps/jerror.P .deps/jfdctflt.P \ +.deps/jfdctfst.P .deps/jfdctint.P .deps/jidctflt.P .deps/jidctfst.P \ +.deps/jidctint.P .deps/jidctred.P .deps/jmemmgr.P .deps/jmemnobs.P \ +.deps/jquant1.P .deps/jquant2.P .deps/jutils.P +SOURCES = $(libposerjpeg_a_SOURCES) +OBJECTS = $(libposerjpeg_a_OBJECTS) + +all: all-redirect +.SUFFIXES: +.SUFFIXES: .S .c .cpp .o .s +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --foreign jpeg/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +mostlyclean-noinstLIBRARIES: + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) + +distclean-noinstLIBRARIES: + +maintainer-clean-noinstLIBRARIES: + +.s.o: + $(COMPILE) -c $< + +.S.o: + $(COMPILE) -c $< + +mostlyclean-compile: + -rm -f *.o core *.core + +clean-compile: + +distclean-compile: + -rm -f *.tab.c + +maintainer-clean-compile: + +libposerjpeg.a: $(libposerjpeg_a_OBJECTS) $(libposerjpeg_a_DEPENDENCIES) + -rm -f libposerjpeg.a + $(AR) cru libposerjpeg.a $(libposerjpeg_a_OBJECTS) $(libposerjpeg_a_LIBADD) + $(RANLIB) libposerjpeg.a + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = jpeg + +distdir: $(DISTFILES) + here=`cd $(top_builddir) && pwd`; \ + top_distdir=`cd $(top_distdir) && pwd`; \ + distdir=`cd $(distdir) && pwd`; \ + cd $(top_srcdir) \ + && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign jpeg/Makefile + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$d/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done + +DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) + +-include $(DEP_FILES) + +mostlyclean-depend: + +clean-depend: + +distclean-depend: + -rm -rf .deps + +maintainer-clean-depend: + +%.o: %.c + @echo '$(COMPILE) -c $<'; \ + $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-cp .deps/$(*F).pp .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm .deps/$(*F).pp + +%.lo: %.c + @echo '$(LTCOMPILE) -c $<'; \ + $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ + < .deps/$(*F).pp > .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm -f .deps/$(*F).pp +info-am: +info: info-am +dvi-am: +dvi: dvi-am +check-am: all-am +check: check-am +installcheck-am: +installcheck: installcheck-am +install-exec-am: +install-exec: install-exec-am + +install-data-am: +install-data: install-data-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-am +uninstall-am: +uninstall: uninstall-am +all-am: Makefile $(LIBRARIES) +all-redirect: all-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install +installdirs: + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-noinstLIBRARIES mostlyclean-compile \ + mostlyclean-tags mostlyclean-depend mostlyclean-generic + +mostlyclean: mostlyclean-am + +clean-am: clean-noinstLIBRARIES clean-compile clean-tags clean-depend \ + clean-generic mostlyclean-am + +clean: clean-am + +distclean-am: distclean-noinstLIBRARIES distclean-compile \ + distclean-tags distclean-depend distclean-generic \ + clean-am + +distclean: distclean-am + +maintainer-clean-am: maintainer-clean-noinstLIBRARIES \ + maintainer-clean-compile maintainer-clean-tags \ + maintainer-clean-depend maintainer-clean-generic \ + distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-am + +.PHONY: mostlyclean-noinstLIBRARIES distclean-noinstLIBRARIES \ +clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \ +mostlyclean-compile distclean-compile clean-compile \ +maintainer-clean-compile tags mostlyclean-tags distclean-tags \ +clean-tags maintainer-clean-tags distdir mostlyclean-depend \ +distclean-depend clean-depend maintainer-clean-depend info-am info \ +dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ +install-exec install-data-am install-data install-am install \ +uninstall-am uninstall all-redirect all-am all installdirs \ +mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/BuildUnix/missing b/BuildUnix/missing new file mode 100755 index 0000000..cbe2b0e --- /dev/null +++ b/BuildUnix/missing @@ -0,0 +1,188 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. +# Copyright (C) 1996, 1997 Free Software Foundation, Inc. +# Franc,ois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +case "$1" in + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + yacc create \`y.tab.[ch]', if possible, from existing .[ch]" + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing - GNU libit 0.0" + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + + aclocal) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acinclude.m4' or \`configure.in'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`configure.in'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acconfig.h' or \`configure.in'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER([^):]*:\([^)]*\)).*/\1/p' configure.in` + if test -z "$files"; then + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^):]*\)).*/\1/p' configure.in` + test -z "$files" || files="$files.in" + else + files=`echo "$files" | sed -e 's/:/ /g'` + fi + test -z "$files" && files="config.h.in" + touch $files + ;; + + automake) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print \ + | sed 's/^\(.*\).am$/touch \1.in/' \ + | sh + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if [ ! -f y.tab.h ]; then + echo >y.tab.h + fi + if [ ! -f y.tab.c ]; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if [ ! -f lex.yy.c ]; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + makeinfo) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` + fi + touch $file + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequirements for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 diff --git a/BuildUnix/mkinstalldirs b/BuildUnix/mkinstalldirs new file mode 100755 index 0000000..a01481b --- /dev/null +++ b/BuildUnix/mkinstalldirs @@ -0,0 +1,40 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman +# Created: 1993-05-16 +# Public domain + +# $Id: mkinstalldirs,v 1.10 1996/05/03 07:37:52 friedman Exp $ + +errstatus=0 + +for file +do + set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` + shift + + pathcomp= + for d + do + pathcomp="$pathcomp$d" + case "$pathcomp" in + -* ) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" 1>&2 + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + fi + fi + + pathcomp="$pathcomp/" + done +done + +exit $errstatus + +# mkinstalldirs ends here diff --git a/Docs/12rollin.pdf b/Docs/12rollin.pdf new file mode 100644 index 0000000..91e45e6 Binary files /dev/null and b/Docs/12rollin.pdf differ diff --git a/Docs/13hewgil.pdf b/Docs/13hewgil.pdf new file mode 100644 index 0000000..e71e5c3 Binary files /dev/null and b/Docs/13hewgil.pdf differ diff --git a/Docs/Debugger.html b/Docs/Debugger.html new file mode 100644 index 0000000..88669cd --- /dev/null +++ b/Docs/Debugger.html @@ -0,0 +1,854 @@ + + + + Debugger + + + + + + +

Palm Debugger Protocol

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

Document Order

+
+

Alphabetical Order

+
+

Overview

+
+

Continue Command

+
+

State Command

+
+

Find Command

+
+

Read Memory + Command

+
+

Get Breakpoints + Command

+
+

Write Memory + Command

+
+

Get Routine Name + Command

+
+

Single Step + Command

+
+

Get Trap Breaks + Command

+
+

Get Routine Name + Command

+
+

Get Trap + Conditionals Command

+
+

Read Registers + Command

+
+

Message Command

+
+

Write Registers + Command

+
+

Overview

+
+

Continue Command

+
+

Read Memory + Command

+
+

Get Breakpoints + Command

+
+

Read Registers + Command

+
+

Set Breakpoints + Command

+
+

RPC Command

+
+

Toggle Debugger + Breaks Command

+
+

Set Breakpoints + Command

+
+

Get Trap Breaks + Command

+
+

Set Trap Breaks + Command

+
+

Set Trap Breaks + Command

+
+

Set Trap + Conditionals Command

+
+

Find Command

+
+

Single Step + Command

+
+

Message Command

+
+

State Command

+
+

RPC Command

+
+

Toggle Debugger + Breaks Command

+
+

Get Trap + Conditionals Command

+
+

Write Memory + Command

+
+

Set Trap + Conditionals Command

+
+

Write Registers + Command

+
+
+ +

Overview

+ +

In this document, "target" refers to the object being debugged. +This could be the Palm ROM, or Palm OS Emulator. "Host" refers +to the debugger, which could be either the Metrowerks debugger or the +Palm Debugger. The target side of the debugger communicates by +sending command packets to the user interface on the host side. +Basically, the target side acts as a slave to the host, carrying out +commands and reporting back results.

+ +

The target side must be able to respond to some basic command +types sent from the host side. These are: get state, display memory, +set memory, single step, get routine name, display registers, set +registers, continue, set breakpoint, clear breakpoint, set a-trap, +clear a-trap, find, and remote procedure call. All high-level +commands that a user enters from the host side are broken down into +one or more of these basic target commands, which are then sent to +the target.

+ +

A command packet can be a request packet, response packet, or +message packet. Request packets are sent from the host to the target +and must be answered by an appropriate response packet from the +target. Message packets are sent from either the target or the host +and merely report status information and do not require a response +from the recipient.

+ +

There is no extensive protocol involved between the host and +target. Basically, the host sends a request packet and waits for a +response from the target, or a timeout. If a response is not detected +by the timeout period, the host does not retry the request but could +display a message to the user saying that the target is not +responding. Usually, if the target does not respond, it means either +that the target is currently executing code and has not encountered a +breakpoint, or that the target is so messed up that it can't even run +the debugger.

+ +

Figure 1 shows the structure of request, response, and message +packets. Basically, every packet consists of a +packet header, a variable length packet body, and a packet footer. +The maximim size of a packet body is 272 bytes. The packet header +starts with the key 24-bit value $BEEFED and includes packet header +information and a checksum of just the header itself. The packet +footer contains a 16-bit CRC of the header and body (not +footer).

+ +

Following the 24-bit value $BEEFED at the start +of the packet header is a destination socket ID byte, a source socket +ID byte, a packet type byte, a 2 byte body size, a transaction ID +byte, and an 8 bit checksum of the header. The destination and source +socket IDs and the packet type bytes are always 0 for debugger +packets. The bodySize field is the number of bytes that are in the +body - which will depend on the particular command being sent. The +transaction ID is an 8 bit value that gets incremented every time a +command is sent from the host. In order for a response packet from +the target to be recognized by the host, its transaction ID must +match the transaction ID of the original request packet.

+ +

The packet body starts with a command byte +immediately followed by a filler byte. The command byte +encodes the particular command being sent or acknowledged. Request +packets always have the upper bit of the command byte clear, response +packets have the upper bit set. Each command has it's own specific +structure following the command and filler bytes. 

+ +

 

+ +

+--------------------+
+ | $BE (1) |
+ | $EF (1) |
+ | $ED (1) |
+ | dest ID (1) | Header (10 bytes)
+ | src ID (1) |
+ | type (1) |
+ | bodySize (2) |
+ | transID (1) |
+ | checkSum (1) |
+ +--------------------+
+ | command (1) |
+ | filler (1) | Body (2-272 bytes)
+ | variable size data |
+ +--------------------+
+ | CRC (2) | Footer (2 bytes)
+ +--------------------+
+

+ +
Figure 1 - Structure of Packets
+ +

 

+ +

State Command

+ +

Figure 2 shows the structure of the request and response bodies +for the state command. The host sends this command in order to +determine the current state of the target, including the current +program counter, the values of all the registers, the reason why the +target entered the debugger, the current breakpoints, and the name of +the routine that the program counter is in. The target will also send +a state response packet to the host whenever it encounters an +exception and enters the debugger - whether due to a breakpoint, bus +error, single step, etc. This is the only time a response packet is +sent to the host without a corresponding request packet from the +host.

+ +
#define sysPktStateCmd    0x00
+#define sysPktStateRsp    0x80
+ +
Max length of a routine name
+ +
#define sysPktMaxNameLen  32
+ +
Number of remote code words to send in the 'state response' packet
+ +
#define sysPktStateRspInstWords  15
+#define dbgNormalBreakpoints     5
+#define dbgTempBPIndex           dbgNormalBreakpoints
+#define dbgTotalBreakpoints      (dbgTempBPIndex+1)
+typedef struct BreakpointType
+{
+    Ptr      addr;        // address of breakpoint
+    Boolean  enabled;     // true if enabled
+    Boolean  installed;   // for alignment
+} BreakpointType;
+ 
+typedef struct SysPktStateCmdType
+{
+    _sysPktBodyCommon;    // Common Body header
+} SysPktStateCmdCmdType;
+ +
Packet Body structure for the state command response packet
+ +
typedef struct SysPktStateRspType
+{
+    _sysPktBodyCommon;                      // Common Body header
+    Boolean        resetted;                // true if target has just reset
+    Word           exceptionId;             // exception which caused the
+                                            // debugger to be entered.
+    M68KregsType   reg;                     // current remote registers.
+    Word           inst[sysPktStateRspInstWords];
+                                            // instruction buffer for
+                                            // code beginning at PC.
+    BreakpointType bp[dbgTotalBreakpoints]; // current breakpoints
+    void*          startAddr;               // start address of routine
+    void*          endAddr;                 // end address of routine
+    char           name[sysPktMaxNameLen];  // routine name (0 or more chars),
+                                            // immediately follows the address range.
+    Byte           trapTableRev;            // rev of trap table. Used to determine
+                                            // when host's trap table cache is invalid
+} SysPktStateRspType;
+ +
Figure 2 - State Command
+ +

The resetted field is non-zero if the target has reset itself +since the last time the debugger was entered. The host can use the +exceptionID field to determine why the debugger on the target was +entered because it contains the address of the exception vector: $8 +for a bus error, $7C for a non-maskable interrupt, etc. The 8 data +registers are stored in the packet body starting from D0. The 7 +address registers are stored starting from A0. The instruction buffer +contains the next 30 bytes of code starting from the current program +counter. The breakpoint list contains the list of the current +breakpoints on the device. This is a fixed length list of 6 +breakpoints - unused entries will have 0 in the enabled and installed +fields. The last breakpoint in the list (breakpoint #5) is used +exclusively for temporary breakpoints installed by the debugger for +implementing commands like GoTill (gt).

+ +

The routineStart, routineEnd, and routineName fields contain the +starting and ending address and name of the current routine. The +target side of the debugger determines this information. A routine +name is placed at the end of every routine by the compiler and the +target side of the debugger scans forward and backwards from the +current program counter to determine this information.

+ +

 

+ +

Read Memory Command

+ +

Figure 3 shows the structure of the request and response bodies +for the read command. This command is sent by the host in order to +read memory on the target. It can return up to 256 bytes of data. The +size of the response body depends on the number of bytes requested in +the request packet.

+ +
#define sysPktReadMemCmd   0x01
+#define sysPktReadMemRsp   0x81
+ 
+typedef struct SysPktReadMemCmdType
+{
+    _sysPktBodyCommon;   // Common Body header
+    void*  address;      // Address to read
+    Word  numBytes;      // # of bytes to read
+} SysPktReadMemCmdType;
+ 
+typedef struct SysPktReadMemRspType
+{
+    _sysPktBodyCommon;   // Common Body header
+ // Byte  data[?];       // variable size
+} SysPktReadMemRspType;
+ +
Figure 3 - Read Command
+ +

 

+ +

Write Memory Command

+ +

Figure 4 shows the structure of the request and response bodies +for the write command. This command is sent by the host in order to +write memory on the target. It can write up to 256 bytes of data. The +size of the request packet depends on the number of bytes that need +to be written.

+ +
#define sysPktWriteMemCmd   0x02
+#define sysPktWriteMemRsp   0x82
+ 
+typedef struct SysPktWriteMemCmdType
+{
+    _sysPktBodyCommon;   // Common Body header
+    void*  address;      // Address to write
+    Word  numBytes;      // # of bytes to write
+ // Byte  data[?];       // variable size data
+} SysPktWriteMemCmdType;
+ 
+typedef struct SysPktWriteMemRspType
+{
+    _sysPktBodyCommon;   // Common Body header
+} SysPktWriteMemRspType;
+ +
Figure 4 - Write Command
+ +

 

+ +

Single Step Command

+ +

Figure 5 shows the structure of the request and response +bodies for the singleStep command. This command is sent by the host +to tell the target to execute the next instruction. This command and +the continue command (see below) are unique in that they do not get a +respective response back from the target. The host relies on the fact +that when the target re-enters the debugger it will automatically +send a state response packet. In this case, the target will re-enter +the debugger immediately after executing the next +instruction.

+ +
#define sysPktSingleStepCmd   0x03
+ +
Figure 5 - Single Step +Command
+ +

Note: there is no actual single step command implemented in either +the ROM or the Palm OS Emulator. Instead, this functionality is +performed by setting the trace bit in the Status Register and +executing a sysPktContinueCmd.

+ +

 

+ +

Get Routine Name +Command

+ +

Figure 6 shows the structure of the request and response bodies +for the getRoutineName command. The host sends this command to +determine which routine a particular address is in. It will return +the starting and ending address of the routine and the name. The name +of each routine is imbedded into the code when it's compiled and the +target can determine the starting and ending address and name of the +routine by scanning forwards and backwards in the code for this +information.

+ +
#define sysPktGetRtnNameCmd   0x04
+#define sysPktGetRtnNameRsp   0x84
+ 
+typedef struct SysPktRtnNameCmdType
+{
+    _sysPktBodyCommon;   // Common Body header
+    void*  address;      // -> address to query on
+} SysPktRtnNameCmdType;
+ 
+typedef struct SysPktRtnNameRspType
+{
+    _sysPktBodyCommon;            // Common Body header
+    void*  address;               // -> address to query on
+    void*  startAddr;             // <- start address of routine
+    void*  endAddr;               // <- end address of routine
+    char  name[sysPktMaxNameLen]; // <- routine name, if any immediately
+                                  //    follows the address range.
+                                  //    The balance need not be sent.
+} SysPktRtnNameRspType;
+ +
Figure 6 - Get Routine Name Command
+ +

The address field in the response body is a copy of the address +sent in the request. The startAddr and endAddr fields are the +starting and ending address of the routine that includes address. The +name field is the 0 terminated name of the routine. If the target can +not determine which routine address is in, it will return 0 for the +first byte of the name in the response body and endAddr will contain +the last address that it scanned in trying to find out the routine +name. Subsequent getRoutineName calls should use the endAddr from the +previous call in order to look for more routines.

+ +

 

+ +

Read Registers Command

+ +

Figure 7 shows the structure of the request and response bodies +for the readRegisters command. This command is sent by the host to +get the value of each of the processor registers on the target. The 8 +data registers are stored in the packet body starting from D0. The 7 +address registers are stored starting from A0.

+ +
#define sysPktReadRegsCmd   0x05
+#define sysPktReadRegsRsp   0x85
+ 
+typedef struct SysPktReadRegsCmdTyp
+{
+    _sysPktBodyCommon;   // Common Body header
+} SysPktReadRegsCmdType;
+ 
+typedef struct SysPktReadRegsRspType
+{
+    _sysPktBodyCommon;   // Common Body header
+    M68KRegsType reg;   // <- return registers
+} SysPktReadRegsRspType;
+ +
Figure 7 - Read Registers Command
+ +

 

+ +

Write Registers +Command

+ +

Figure 8 shows the structure of the request and response bodies +for the writeRegisters command. This command is sent by the host to +set the value of each of the processor registers on the target. The 8 +data registers are stored in the packet body starting from D0. The 7 +address registers are stored starting from A0.

+ +
#define sysPktWriteRegsCmd   0x06
+#define sysPktWriteRegsRsp   0x86
+ 
+typedef struct SysPktWriteRegsCmdType
+{
+    _sysPktBodyCommon;   // Common Body header
+    M68KRegsType reg;    // -> registers to write
+} SysPktWriteRegsCmdType;
+ 
+typedef struct SysPktWriteRegsRspType
+{
+    _sysPktBodyCommon;   // Common Body header
+} SysPktWriteRegsRspType;
+ +
Figure 8 - Write Registers Command
+ +

 

+ +

Continue Command

+ +

Figure 9 shows the structure of the request and response bodies +for the continue command. This command is sent by the host to tell +the target to continue execution. This is usually sent as a result of +the user entering the Go (g) command. The debugger on the target will +not get re-entered again unless a breakpoint or other exception is +encountered. The target does not send a response to this command. If +the target does re-enter the debugger due to a subsequent exception, +it will send a state response packet to the host.

+ +
#define sysPktContinueCmd   0x07
+ 
+typedef struct SysPktContinueCmdType
+{
+    _sysPktBodyCommon;        // Common Body header
+    M68KregsType regs;        // registers
+    Boolean      stepSpy;     // set true to do step spy
+    DWord        ssAddr;      // step spy address
+    DWord        ssCount;     // # of bytes
+    DWord        ssCheckSum;  // checksum
+} SysPktContinueCmdType;
+ +
Figure 9 - Continue Command
+ +

 

+ +

Get Breakpoints +Command

+ +

Figure 10 shows the structure of the request and response bodies +for the getBreakpoints command. This command is sent by the host to +get the current settings of all target breakpoints. The response body +has an array of 6 breakpoints in it. If the enabled field for a +particular breakpoint entry is 0, it means that breakpoint is +disabled. If the address field is 0, it means that breakpoint is not +used. The installed field is currently never used.

+ +
#define sysPktGetBreakpointsCmd  0x0B
+#define sysPktGetBreakpointsRsp  0x8B
+ 
+typedef struct SysPktGetBreakpointsCmdType
+{
+    _sysPktBodyCommon;   // Common Body header
+} SysPktGetBreakpointsCmdType;
+ 
+typedef struct SysPktGetBreakpointsRspType
+{
+    _sysPktBodyCommon;   // Common Body header
+    BreakpointType bp[dbgTotalBreakpoints];
+} SysPktGetBreakpointsRspType;
+ +
Figure 10 - Get Breakpoints Command
+ +

 

+ +

Set Breakpoints +Command

+ +

Figure 11 shows the structure of the request and response bodies +for the setBreakpoints command. This command is sent by the host to +set the target breakpoints. The request body has an array of 6 +breakpoints in it. If the enabled field for a particular breakpoint +entry is 0, it means that breakpoint is disabled. If the address +field is 0, it means that breakpoint is not used.

+ +
#define sysPktSetBreakpointsCmd  0x0C
+#define sysPktSetBreakpointsRsp  0x8C
+ 
+typedef struct SysPktSetTrapBreaksCmdType
+{
+    _sysPktBodyCommon;   // Common Body header
+    Word  trapBP[dbgTotalTrapBreaks];
+} SysPktSetTrapBreaksCmdType;
+ 
+typedef struct SysPktSetTrapBreaksRspType
+{
+    _sysPktBodyCommon;   // Common Body header
+} SysPktSetTrapBreaksRspType;
+ +
Figure 11 - Set Breakpoints Command
+ +

 

+ +

Toggle Debugger +Breaks Command

+ +

Figure 12 shows the structure of the request and response bodies +for the toggleDbgBreaks command. This command is sent by the host to +enable or disable compiled-in breakpoints. A compiled in breakpoint +is a special TRAP instruction that gets compiled into the code with +the DbgBreak() and DbgSrcBreak() calls. The host can send this +command to tell the target whether or not to ignore these +breakpoints. The request toggles the state and the response returns +the new state (non-zero for enabled, 0 for disabled).

+ +
#define sysPktDbgBreakToggleCmd  0x0D
+#define sysPktDbgBreakToggleRsp  0x8D
+ 
+typedef struct SysPktDbgBreakToggleCmdType
+{
+    _sysPktBodyCommon;   // Common Body header
+} SysPktDbgBreakToggleCmdType;
+ 
+typedef struct SysPktDbgBreakToggleRspType
+{
+    _sysPktBodyCommon;   // Common Body header
+    Boolean  newState;
+} SysPktDbgBreakToggleRspType;
+ +
Figure 12 - Toggle Debugger Breaks Command
+ +

 

+ +

Get Trap Breaks +Command

+ +

Figure 13 shows the structure of the request and response bodies +for the getTrapBreaks command. The host sends this command to get the +current settings of all target trap breaks. The response body has an +array of 5 traps in it. If the trap field is 0, it means that trap +break is not used. Trap breaks are used to force the target to enter +the debugger when a particular system trap is called. Up to 5 trap +breaks can be set at any time.

+ +
#define sysPktGetTrapBreaksCmd  0x10
+#define sysPktGetTrapBreaksRsp  0x90
+ 
+typedef struct SysPktGetTrapBreaksCmdType
+{
+    _sysPktBodyCommon;   // Common Body header
+} SysPktGetTrapBreaksCmdType;
+ 
+typedef struct SysPktGetTrapBreaksRspType
+{
+    _sysPktBodyCommon;   // Common Body header
+    Word  trapBP[dbgTotalTrapBreaks];
+} SysPktGetTrapBreaksRspType;
+ +
Figure 13 - Get Trap Breaks Command
+ +

Set Trap Breaks +Command

+ +

Figure 14 shows the structure of the request and response bodies +for the setTrapBreaks command. The host sends this command to set the +current settings of all target trap breaks. The request body has an +array of 5 traps in it. If the trap field is 0, it means that trap +break is not used. Trap breaks are used to force the target to enter +the debugger when a particular system trap is called. Up to 5 trap +breaks can be set at any time.

+ +
#define sysPktSetTrapBreaksCmd  0x11
+#define sysPktSetTrapBreaksRsp  0x91
+ 
+typedef struct SysPktSetTrapBreaksCmdType
+{
+    _sysPktBodyCommon;   // Common Body header
+    Word  trapBP[dbgTotalTrapBreaks];
+} SysPktSetTrapBreaksCmdType;
+ 
+typedef struct SysPktSetTrapBreaksRspType
+{
+    _sysPktBodyCommon;   // Common Body header
+} SysPktSetTrapBreaksRspType;
+ +
Figure 14 - Set Trap Breaks Command
+ +

Find Command

+ +

Figure 15 shows the structure of the request and response bodies +for the find command. This command is sent by the host to search for +data on the target. The firstAddr and lastAddr fields of the request +set the range of addresses to search through. The numBytes field +contains the number of bytes in the search string. If the +caseInsensitive byte is non-zero, a case-insensitive search will be +made. The variable length search string follows the caseInsensitive +field.

+ +

In the response body, addrFound contains the address of the found +data. If the data was not found, the found field will be 0.

+ +
#define sysPktFindCmd    0x13
+#define sysPktFindRsp    0x93
+ 
+typedef struct SysPktFindCmdType
+{
+    _sysPktBodyCommon;       // Common Body header
+    DWord   firstAddr;       // first address to search
+    DWord   lastAddr;        // last address to begin searching
+    Word    numBytes;        // number of data bytes to match
+    Boolean caseInsensitive; // if true, perform a case-insensitive search
+} SysPktFindCmdType;
+ 
+typedef struct SysPktFindRspType
+{
+    _sysPktBodyCommon;   // Common Body header
+    DWord  addr;         // address where data was found
+    Boolean  found;      // true if data was found
+} SysPktFindRspType;
+ +
Figure 15 - Find Command
+ +

Message Command

+ +

Figure 16 shows the structure of the message packet body. This +packet is sent by the target to display a message on the host. +Debugger messages can be compiled into the source code through the +DbgMessage() call. They can be used by applications on Palm devices +for displaying application specific debugging messages during +execution. There is no response sent back from the host to the target +when it receives one of these packets.

+ +
#define sysPktRemoteMsgCmd   0x7F
+ 
+typedef struct SysPktRemoteMsgCmdType
+{
+    _sysPktBodyCommon;   // Common Body header
+    Byte  text[1];       // variable length text goes here
+} SysPktRemoteMsgCmdType;
+ +
Figure 16 - Message Command
+ +

RPC Command

+ +
#define sysPktRPCCmd    0x0A
+#define sysPktRPCRsp    0x8A
+ 
+typedef struct SysPktRPCParamInfo
+{
+    Byte   byRef;    // true if param is by reference
+    Byte   size;     // # of Bytes of paramData (must be even)
+    Word   data[1];  // variable length array of paramData
+} SysPktRPCParamType;
+ 
+typedef struct SysPktRPCType
+{
+    _sysPktBodyCommon;   // Common Body header
+    Word   trapWord;     // which trap to execute
+    Dword  resultD0;     // result from D0 placed here
+    Dword  resultA0;     // result from A0 placed here
+    Word   numParams;    // how many parameters follow
+ 
+    // Following is a variable length array of SysPktRPCParamType's
+    SysPktRPCParamType param[1];
+} SysPktRPCType;
+ +
Figure 17 - RPC Command
+ +

Get Trap Conditionals +Command (new in 3.0)

+ +

These are used to tell the debugger to conditionally break on a +trap depending on the value of the first word on the stack. They are +used when setting a-traps on library calls.

+ +
#define sysPktGetTrapConditionsCmd  0x14
+#define sysPktGetTrapConditionsRsp  0x94
+ 
+typedef struct SysPktGetTrapConditionsCmdType
+{
+    _sysPktBodyCommon;   // Common Body header
+} SysPktGetTrapConditionsCmdType;
+ 
+typedef struct SysPktGetTrapConditionsRspType
+{
+    _sysPktBodyCommon;   // Common Body header
+    Word  trapParam[dbgTotalTrapBreaks];
+} SysPktGetTrapConditionsRspType;
+ +
Figure 18 - Get Trap Conditionals Command
+ +

Set Trap Conditionals +Command (new in 3.0)

+ +

These are used to tell the debugger to conditionally break on a +trap depending on the value of the first word on the stack. They are +used when setting a-traps on library calls.

+ +
#define sysPktSetTrapConditionsCmd  0x15
+#define sysPktSetTrapConditionsRsp  0x95
+ 
+typedef struct SysPktSetTrapConditionsCmdType
+{
+    _sysPktBodyCommon;   // Common Body header
+    Word  trapParam[dbgTotalTrapBreaks];
+} SysPktSetTrapConditionsCmdType;
+ 
+typedef struct SysPktSetTrapConditionsRspType
+{
+    _sysPktBodyCommon;   // Common Body header
+} SysPktSetTrapConditionsRspType;
+ +
Figure 19 - Set Trap Conditionals Command
+ +

 

+ + diff --git a/Docs/POSER Profiler.rtf b/Docs/POSER Profiler.rtf new file mode 100644 index 0000000..e1de7df --- /dev/null +++ b/Docs/POSER Profiler.rtf @@ -0,0 +1,522 @@ +{\rtf1\mac \deff8\deflang1033{\fonttbl{\f1\fnil\fcharset2\fprq2 Symbol;}{\f3\fnil\fcharset77\fprq2 Courier;}{\f8\fnil\fcharset77\fprq2 Times;}{\f9\fnil\fcharset77\fprq2 Helvetica;}{\f48\fnil\fcharset77\fprq2 Monaco;}} +{\colortbl;\red0\green0\blue0;\red0\green0\blue212;\red2\green171\blue234;\red31\green183\blue20;\red242\green8\blue132;\red221\green8\blue6;\red252\green243\blue5;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green100\blue17; +\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\widctlpar \f8 \snext0 Normal;}{\s1\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl1\pndec\pnprev1\pnstart1\pnsp144 {\pntxta .}} +\b\f8\fs36 \sbasedon0\snext0 heading 1;}{\s2\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl2\pndec\pnprev1\pnstart1\pnsp144 }\b\i\f8\fs28 \sbasedon0\snext0 heading 2;}{\s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 +\sbasedon0\snext0 heading 3;}{\s4\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl4\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\i\f8 \sbasedon0\snext0 heading 4;}{\s5\sb240\sa60\widctlpar{\*\pn \pnlvl5\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\f9\fs22 +\sbasedon0\snext0 heading 5;}{\s6\sb240\sa60\widctlpar{\*\pn \pnlvl6\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\i\f9\fs22 \sbasedon0\snext0 heading 6;}{\s7\sb240\sa60\widctlpar{\*\pn \pnlvl7\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\f9\fs20 +\sbasedon0\snext0 heading 7;}{\s8\sb240\sa60\widctlpar{\*\pn \pnlvl8\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\i\f9\fs20 \sbasedon0\snext0 heading 8;}{\s9\sb240\sa60\widctlpar{\*\pn \pnlvl9\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\i\f9\fs18 +\sbasedon0\snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\li1200\widctlpar\tqr\tldot\tx11880 \f8\fs18 \sbasedon0\snext0 toc 8;}{\s16\li1000\widctlpar\tqr\tldot\tx11880 \f8\fs18 \sbasedon0\snext0 toc 7;}{ +\s17\li800\widctlpar\tqr\tldot\tx11880 \f8\fs18 \sbasedon0\snext0 toc 6;}{\s18\li600\widctlpar\tqr\tldot\tx11880 \f8\fs18 \sbasedon0\snext0 toc 5;}{\s19\li400\widctlpar\tqr\tldot\tx11880 \f8\fs18 \sbasedon0\snext0 toc 4;}{ +\s20\li200\widctlpar\tqr\tldot\tx11880 \i\f8 \sbasedon0\snext0 toc 3;}{\s21\widctlpar\tqr\tldot\tx11880 \scaps\f8 \sbasedon0\snext0 toc 2;}{\s22\sb120\sa120\widctlpar\tqr\tldot\tx11880 \b\caps\f8 \sbasedon0\snext0 toc 1;}{ +\s23\fi-240\li1680\widctlpar\tqr\tx5580 \f8\fs18 \sbasedon0\snext0 index 7;}{\s24\fi-240\li1440\widctlpar\tqr\tx5580 \f8\fs18 \sbasedon0\snext0 index 6;}{\s25\fi-240\li1200\widctlpar\tqr\tx5580 \f8\fs18 \sbasedon0\snext0 index 5;}{ +\s26\fi-240\li960\widctlpar\tqr\tx5580 \f8\fs18 \sbasedon0\snext0 index 4;}{\s27\fi-240\li720\widctlpar\tqr\tx5580 \f8\fs18 \sbasedon0\snext0 index 3;}{\s28\fi-240\li480\widctlpar\tqr\tx5580 \f8\fs18 \sbasedon0\snext0 index 2;}{ +\s29\fi-240\li240\widctlpar\tqr\tx5580 \f8\fs18 \sbasedon0\snext0 index 1;}{\s30\widctlpar\tqc\tx4320\tqr\tx8640 \f8 \sbasedon0\snext30 footer;}{\s31\widctlpar\tqc\tx4320\tqr\tx8640 \f8 \sbasedon0\snext31 header;}{\s32\li1400\widctlpar\tqr\tldot\tx11880 +\f8\fs18 \sbasedon0\snext0 toc 9;}{\s33\sb120\sa120\widctlpar \b\i\f8 \sbasedon0\snext29 index heading;}{\s34\fi-1710\li1710\widctlpar\tx360\tx720\tx1080\tx1440\tx1710\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 +\f3\fs20 \sbasedon0\snext34 Code;}{\s35\fi-1710\li1710\widctlpar\box\brdrs\brdrw15\brsp20 \tx360\tx720\tx1080\tx1440\tx1710\tx1800\tx1980\tx2160\tx2340\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 \f48\fs18 \sbasedon34\snext35 +PsuedoCode;}{\s36\fi-1710\li1710\ri-3680\widctlpar\tx540\tx720\tx980\tx1080\tx1440\tx1800\tx1980\tx2160\tx2420\tx2520\tx2880\tx3240\tx3320\tx3600\tx3780\tx3960\tx4220\tx4680\tx5040\tx5400\tx5760 \f48\fs18 \sbasedon34\snext36 API Summary;}{ +\s37\fi-200\li1600\widctlpar\tqr\tldot\tx8640 \f8 \sbasedon0\snext0 index 8;}{\s38\fi-200\li1800\widctlpar\tqr\tldot\tx8640 \f8 \sbasedon0\snext0 index 9;}{\s39\fi-2700\li3060\widctlpar\tx1440\tx3060 \f8 \sbasedon0\snext39 Prototype;}{ +\s40\fi-240\li1920\widctlpar\tqr\tx5580 \f8\fs18 \sbasedon0\snext0 index 8;}{\s41\fi-240\li2160\widctlpar\tqr\tx5580 \f8\fs18 \sbasedon0\snext0 index 9;}{\s42\qc\sb240\sa120\widctlpar \b\f8\fs26 \sbasedon0\snext29 index heading;}{\s43\widctlpar \f8 +\sbasedon0\snext43 ading 2;}}{\info{\title Touchdown System Software Spec}{\subject Touchdown System Software}{\author Bob Ebert}{\keywords Touchdown System Software API}{\operator Bob Ebert}{\creatim\yr1998\mo6\dy10\hr15\min43} +{\revtim\yr1998\mo6\dy10\hr19\min4}{\version128}{\edmins143}{\nofpages0}{\nofwords0}{\nofchars0}{\vern49235}}\paperw14400\paperh18620\margl1440\margr1080 \widowctrl\ftnbj\aenddoc\hyphhotz0\sprstsp\otblrul\brkfrm\sprstsm\truncex\nolead\msmcap\hyphcaps0 +\fet0\sectd \sbknone\linex0\endnhere {\header \pard\plain \s31\nowidctlpar\tqc\tx4320\tqr\tx8640 \f8 {\i\ul Palm Computing Confidential\tab \tab For Internal Use Only +\par }}{\footer \pard\plain \s30\nowidctlpar\tqc\tx4320\tqr\tx8640 \f8 POSER Profiler\tab Page {\chpgn }\tab Last Revised: 6/10/98 +\par }{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5 +\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang +{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\pntext\pard\plain\b\fs36\cchs0 1.\tab}\pard\plain \s1\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl1\pndec\pnprev1\pnstart1\pnsp144 {\pntxta .}}\b\f8\fs36 Overview + +\par \pard\plain \widctlpar \f8 POSER\rquote s emulator can be used to profile the code that it\rquote +s executing. It does this by counting cycles while it simulates the opcodes, and watching for JSR/RTS and interrupt/RTE events. It dumps the resulting data to file that is compatible with the Metrowerks Profiler application for Macintosh. +\par \pard \widctlpar +\par {\pntext\pard\plain\b\fs36\cchs0 2.\tab}\pard\plain \s1\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl1\pndec\pnprev1\pnstart1\pnsp144 {\pntxta .}}\b\f8\fs36 Profiler Implementation +\par {\pntext\pard\plain\b\i\fs28\cchs0 2.1\tab}\pard\plain \s2\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl2\pndec\pnprev1\pnstart1\pnsp144 }\b\i\f8\fs28 UAE Changes +\par \pard\plain \widctlpar \f8 This section describes the profiling changes to the UAE sources. +\par +\par {\pntext\pard\plain\b\cchs0 2.1.1\tab}\pard\plain \s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 Build68K +\par \pard\plain \widctlpar \f8 UAE is built into POSER in three stages. In the first stage, Build68K takes a text file called \ldblquote table68K\rdblquote containing information about the 68K opcodes and produces \ldblquote cpudefs.c\rdblquote +, a C source file with a compressed version of UAE specific information for each opcode. There are no profiling changes to this stage. In the third stage, the POSER sour +ces are combined with the sources produced by GenCPU to build the final executable. The profiling changes for POSER are described in the next section. +\par \pard \widctlpar +\par {\pntext\pard\plain\b\cchs0 2.1.2\tab}\pard\plain \s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 GenCPU +\par \pard\plain \widctlpar \f8 +In the second stage, GenCPU is built from sources and the cpudefs.c file from state one. When run, GenCPU can produce functions to emulate each 68K Opcode. GenCPU has been modified to produce a table of read cycle, write cycle, and extra CPU cycles for +each opcode. In addition, some of the opcode functions (e.g. Bcc) include specific code to tell the profiler to increment the clock. +\par \pard \widctlpar +\par \pard \widctlpar +As GenCPU is running, it adds comments to each opcode function to indicate what the profiling numbers are for that opcode. (gen_opcode) The numbers are specific to the MC68000 processor, to match the MC68EC000 used in the Palm devices. The source for t +he data is the \ldblquote Motorola MC68000 8-/16-/32-Microprocessors User\rquote s Manual\rdblquote section 8. Read and write cycles are tracked seperately, as well as additional CPU-only cycles for each opcode. +\par \pard \widctlpar +\par \pard \widctlpar gen_opcode calls genaread and genastore for each opcode to read in arguments and write out results. These functions have been modified to accumulate read, write and extra CPU cycles for each operation. +\par \pard \widctlpar +\par \pard \widctlpar After calling gen_opcode, generate_func takes the accumulated read, write, and extra cycle counts for the opcode and produces data for a table that\rquote +s used by POSER. It also writes a comment after each code block with the expected (per the Motorola manual) and actual (per accumulated numbers) cycle counts for the function. This is hand +y because the resulting .c file with the opcode functions can be viewed to check the accuracy of the cycle counting. +\par \pard \widctlpar +\par {\pntext\pard\plain\b\cchs0 2.1.3\tab}\pard\plain \s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 Inaccuracies +\par \pard\plain \widctlpar \f8 Here are some known inaccuracies with the current cycle counts. +\par +\par \pard \widctlpar JMP, JSR, RTS, RTE, and Bcc fall short by one read each, for 6 or 8 cycles each depending on ROM or RAM. I believe this is because the CPU does instruction prefetch, and so the times in Motorola\rquote +s tables actually include the time needed to fetch the next instruction, not the current instruction. PC-changing instr +uctions need to throw away the prefetched instruction and read in the real next instruction, so this takes an extra read cycle. POSER does not prefetch, so there\rquote +s no good way to account for this. (Since the next instruction may be in ROM or RAM, the actual CPU cycles taken may differ.) +\par \pard \widctlpar +\par \pard \widctlpar ANDSR, ORSR, MV2SR and other "SR" instructions are 2 reads short, for 12 or 16 cycles. I\rquote m not sure why this is, some implementation detail with how the CPU references the status register? +\par \pard \widctlpar +\par \pard \widctlpar MUL and DIV instructions are c +ounted as worst case. Both have unusual execution times which depend on the values being multiplied or divided. The DIV instructions is supposedly less than a 10% difference from best to worst case, for a range of 144-158 cycles for signed and 126-140 c +ycles for unsigned values. These are counted as 158 and 140 cycles (plus wait states and effective address calculation times.) The MUL operations take 38+2n cycles, where n is the number of 1\rquote +s in the memory value for MULU, and the number of 10 or 01 patterns in the memory value catenated with 0 (as the LSB). 70 is indicated as the max value, and that is what is used. +\par {\pntext\pard\plain\b\i\fs28\cchs0 2.2\tab}\pard\plain \s2\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl2\pndec\pnprev1\pnstart1\pnsp144 }\b\i\f8\fs28 POSER changes +\par \pard\plain \widctlpar \f8 Switches.h has a HAS_PROFILING switch, which must be non-zero to include profiling in an Emulator build. +\par +\par {\pntext\pard\plain\b\cchs0 2.2.1\tab}\pard\plain \s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 CEumlatorApp.cpp +\par \pard\plain \widctlpar \f8 +CEmulatorApp .cpp contains a little bit of code that hooks the user interface up with the functions in Profiling.cpp. Changes are made in CEmulatorApp::ObeyCommand to responds to menu and key events generated by the user, and in CEmulatorApp::FindCommand +Status to makes sure the menu state is correct. The profiling menu is defined in Palm OS Emulator.ppob. +\par \pard \widctlpar +\par {\pntext\pard\plain\b\cchs0 2.2.2\tab}\pard\plain \s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 CPU_REG.cpp +\par \pard\plain \widctlpar \f8 CPU_REG.cpp defines and loads the table of read, write, and extra cycles for each opcode. +\par +\par \pard \widctlpar +Emulator::Execute has been modified to count cycles as the opcode executes. Most of the cycle counting is done by the functions that read and write memory, but the extra CPU-only cycles are counted in Emulator::Execute. Emulator::Execute also sets and cl +ears a flag to tell the profiler to pay attention to cycles. This is necessary so that the emulator\rquote s internal use of the memory read/write functions (to draw the screen, call ROM traps, etc) are not charged against the running application. +\par \pard \widctlpar +\par \pard \widctlpar +CPU_REG.cpp also has some code controlled by the HAS_PROFILING_DEBUG flag to help debug the profiler. This code compares the actual cycles counted as the opcodes are executed to the ones specified as expected in the table. That is also done in Emulator: +:Execute. +\par \pard \widctlpar +\par Hardware::Initialize loads the table of cycle counts. +\par +\par \pard \widctlpar +Software::ProcessException is hooked in to the emulator opcodes to special case exceptions. It allows POSER to patch out the exception handlers and do its own thing. The profiler counts time spent in exceptions seperately from time spent in regular func +tions, so Software::ProcessException calls ProfleInterruptEnter to do this. If the emulator patched out the exception, the ProfileInterruptExit is also called here. If not, then the interrupt is not finished until the RTE opcode is executed, and Softwar +e::ProcessRTE handles this. +\par \pard \widctlpar +\par \pard \widctlpar +Software::ProcessJSR is called by the CPU emulator function for JSR opcodes. It calls ProfileFnEnter to start profiling for the new function. Similarly, Software::ProcessRTS calls ProfileFnExit to stop profiling for the function and return to the enclos +ing function. +\par \pard \widctlpar +\par \pard \widctlpar Software::ProcessTrap14 has been taken over to allow executing code to contol aspects of the emulator. Controlling the profiler is part of this, and there are \ldblquote E-traps\rdblquote to init, start, stop, dump, and cleanup pro +filing. +\par \pard \widctlpar +\par \pard \widctlpar Software::ProcessTrap15 creates a \ldblquote fake\rdblquote function call by calling ProfileFnEnter and ProfileFnExit. By using the trap number for the address, this allows the profiler to count \ldblquote F-traps\rdblquote + by trap number, which is handy for finding out which system traps ar +e used most often. Software::ProcessTrap15 also normally skips the emulated trap dispatcher, preferring instead to get the trap address and do the jump itself. This greatly improves performance when emulating normal code, since about 10% of the ti +me is spent in the trap dispatcher for common operations. When profiling, native dispatch is skipped, because we actually want to know what overhead the trap dispatcher is requiring. +\par \pard \widctlpar +\par {\pntext\pard\plain\b\cchs0 2.2.3\tab}\pard\plain \s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 RAM_ROM.cpp +\par \pard\plain \widctlpar \f8 RAM_ROM.cpp implements reading and writing to memory for various memory banks. Because the Palm devices require wait states when accessing memory, it\rquote +s not enough to simply count reads and writes as 4 cycles each (which is the CPU overhead for them.) Palm devices use different wait states for different memory, a +nd quite possibly devices will have different wait state characteristics in the future. RAM_ROM.cpp counts this. +\par \pard \widctlpar +\par \pard \widctlpar +Each of the GetLong, GetWord, GetByte, SetLong, SetWord, and SetByte functions for each memory type calls either ProfileIncrementRead or ProfileIncrementWrite, passing in the number of read or write cycles and the number of wait states for that memory typ +e. (The wait states are #defined in Profiling.h) ProfileIncrementRead and ProfileIncrementWrite are inlined to improve performance in the emulator. +\par \pard \widctlpar +\par {\pntext\pard\plain\b\cchs0 2.2.4\tab}\pard\plain \s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 TrapPatches.cpp +\par \pard\plain \widctlpar \f8 +TrapPatches.cpp turns off a couple of trap patches if the profiler is built into the emulator. Normally, these are patched out to improve performance by avoiding emulating the ROM routines. Some of the others should probably be turned off with the HAS_P +ROFILING switch as well, but they are required by the emulator itself. +\par \pard \widctlpar +\par {\pntext\pard\plain\b\i\fs28\cchs0 2.3\tab}\pard\plain \s2\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl2\pndec\pnprev1\pnstart1\pnsp144 }\b\i\f8\fs28 Profiling Code +\par \pard\plain \widctlpar \f8 Most of the profiling code is in Profiling.h and Profiling.cpp. This is the chunk that gathers and dumps the profiling data. +\par +\par {\pntext\pard\plain\b\cchs0 2.3.1\tab}\pard\plain \s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 Accumulators and Flags +\par \pard\plain \widctlpar \f8 +gReadCycles, gWriteCycles, and gClockCycles contain the total number of read, write, and clocks that have passed since profiling was started. These globals are accessed from other modules through the inline functions in Profiling.h. +\par \pard \widctlpar +\par \pard \widctlpar +gProfilingEnabled, gProfilingOn, and gProfilingCounted are flags that indicate the current state of profiling affairs. Enabled indicates profiling buffers have been allocated and profiling is happening or could start or stop at any time. On indicates pr +ofiling data is currently being collected. Counted indicates that the current instructions as well as memory reads and writes should be added to the global read/write/cycle counts. +\par \pard \widctlpar +\par {\pntext\pard\plain\b\cchs0 2.3.2\tab}\pard\plain \s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 Data Structures +\par \pard\plain \widctlpar \f8 The profiler uses two main data structures to accumulate data: a tree of function call records and a stack of currently in progress functions or interrupts. +\par \pard \widctlpar +\par \pard \widctlpar The tree is stored in memory using the same format as the Metrowerks profiler file, so dumping the output file is a simple matter of writing a memory block to disk. See A +ppendix B for the record format. Global variables contain the index of: the root of the tree, the record used for overflow tracking, the record used as the root for interrupt tracking, and the index of the next available record. +\par \pard \widctlpar +\par The stack is an array of the following records. Each element tracks a function or interrupt that is currently executing. +\par \pard\plain \s34\fi-1710\li1710\widctlpar\tx360\tx720\tx1080\tx1440\tx1710\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 \f3\fs20 struct FnStackRecord \{ +\par \pard \s34\fi-1710\li1710\widctlpar\tx360\tx720\tx1080\tx1440\tx1710\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 \tab int call;\tab \tab \tab \tab \tab \tab \tab \tab // fn data block for fn being called +\par \tab uaecptr returnAddress;\tab \tab \tab // return address aka (SP) to calling fn +\par \tab UInt64 cyclesAtEntry;\tab \tab \tab // cycle count when fn was called +\par \tab UInt64 cyclesAtInterrupt;\tab \tab // cycle count when fn was interrupted +\par \tab UInt64 cyclesInKids;\tab \tab \tab \tab // number of cycles spent in subroutines +\par \tab UInt64 cyclesInInterrupts;\tab \tab // number of cycles spent in interrupts +\par \}; +\par \pard\plain \widctlpar \f8 +\par A global variable holds the current top of the stack. +\par +\par \pard \widctlpar To handle interrupts, a separate stack is used that keeps track of the call stack record that matches the interrupt. A stack is necessary for this because interrupts can be interrupted. We allow up to 8 of these, but I\rquote +ve never seen more than 2 used. +\par \pard \widctlpar +\par {\pntext\pard\plain\b\cchs0 2.3.3\tab}\pard\plain \s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 GetRoutineName +\par \pard\plain \widctlpar \f8 +GetRoutineName turns an address (or interrupt number or trap number) into a string representation for that function. It attempts to use the ROM.map data to find the function name, and if no match is found it steps through the instructions found at the ad +dress indicated until it finds the end of the function, then looks for the debug symbol. If the address was to a function in a code resource and the resource was moved, then the name will be i +ncorrect. GetRoutineName is completely responsible for turning an address into a name, and it will always return some string, even if passed an invalid address. +\par {\pntext\pard\plain\b\cchs0 2.3.4\tab}\pard\plain \s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 Generating Function Names +\par \pard\plain \widctlpar \f8 +The functiosn InitStringTable, CleanupStringTable, and FindOrAddString do the work of creating the string table (as described in Appendix B) and then adding strings to it. RecursiveAddressToStrings traverses the tree of functions and changes the address +stored with each function record into an offset into the string table, which it is generating. That\rquote s a one-time operation, if you tried to do it twice you\rquote d get garbage. +\par {\pntext\pard\plain\b\cchs0 2.3.5\tab}\pard\plain \s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 PopCallStackFn +\par \pard\plain \widctlpar \f8 +PopCallStackFn is used when a function or interrupt is being exited from. It updates the nodes in the tree to properly track call counts and time spent in interrupts and in children. It is called both during normal function or interrupt exit and by clea +nup code that\rquote s trying to keep the profiler\rquote s call stack in sync with the CPU\rquote s call stack. +\par {\pntext\pard\plain\b\cchs0 2.3.6\tab}\pard\plain \s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 FindOrAddCall +\par \pard\plain \widctlpar \f8 FindOrAddCall is used when a f +unction or interrupt is being entered. It looks to see if the function has prevously been called from the current function or interrupt, and if so returns the existing record. If not, a new record is allocated, initialized, and plugged into the tree. + +\par {\pntext\pard\plain\b\cchs0 2.3.7\tab}\pard\plain \s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 ProfileInit +\par \pard\plain \widctlpar \f8 ProfileInit allocates the stack and tree with the passed sizes, and initializes a bunch of other data structures. +\par {\pntext\pard\plain\b\cchs0 2.3.8\tab}\pard\plain \s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 ProfileCleanup +\par \pard\plain \widctlpar \f8 ProfileCleanup frees the data structures allocated in ProfileInit +\par {\pntext\pard\plain\b\cchs0 2.3.9\tab}\pard\plain \s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 ProfileStart +\par \pard\plain \widctlpar \f8 ProfileStart turns on the profiling flags. Currently it assumes that it is not called from within an interrupt, often is not the case. When invoked from the POSER UI, the CPU is often currently processing an interrupt. +\par {\pntext\pard\plain\b\cchs0 2.3.10\tab}\pard\plain \s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 ProfileStop +\par \pard\plain \widctlpar \f8 ProfileStop turns off collection of profiling data. If there are functions currently on the profiling stack, they are popped. +\par {\pntext\pard\plain\b\cchs0 2.3.11\tab}\pard\plain \s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 ProfileDump +\par \pard\plain \widctlpar \f8 ProfileDump reads in the ROM.map file, turns all the addresses in the call tree into real function names, generating the string table in the process, then dumps out the heade +r, tree, and stringtable to disk. This operation is destructive to the function tree, and cannot be done more than once. (It should probably call ProfileCleanup to make sure this doesn\rquote t happen.) +\par {\pntext\pard\plain\b\cchs0 2.3.12\tab}\pard\plain \s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 ProfileFnEnter +\par \pard\plain \widctlpar \f8 ProfileFnEnter is called by the emulator when a JSR is executed, and at a couple of other places. It creates a record for the function (or reuses an existing record), and updates the profiler\rquote s call stack. +\par \pard \widctlpar +\par \pard \widctlpar ProfileFnEnter also supports a special profiling mode. If the profiler is built with PROFILE_ONE_FN on, then it\rquote +s assumed that whenever profiling has been initialized, you always want to start profiling when a specified function is entered, and stop profiling when that function is exited. That way you get profiling information for a particul +ar function no matter who it\rquote s called from. In this case, ProfileFnEnter may be called before ProfileStart has been called, and if it detects that the target function has been entered it will start profiling at that point. +\par {\pntext\pard\plain\b\cchs0 2.3.13\tab}\pard\plain \s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 ProfileFnExit +\par \pard\plain \widctlpar \f8 ProfileFnExit is called by the emulator when an RTS is executed The Palm OS does some funny things such that there is not always an RTS for every JSR. To handle this, ProfileFnExit has to be smart +, so it keeps the return address when a function is called and compares it to the destination address for the RTS. Most of the time they match, and everything is fine, but when they don\rquote t one of two things may be happening: either a function +is being called not by using JSR, but rather by pushing the callee\rquote s address on the stack then executing an RTS, or a RTS has been skipped and the stack has been cleaned up by the executing code (the kernel does this.) +\par \pard \widctlpar +\par \pard \widctlpar +If the return address is not what we expected based on the profiling stack, then the first thing we do is walk up the stack looking to see if the address matches some higher function. If it does, the stack is popped up to the function we expect, and the +intervening functions are flagged as improperly exited. If no match was found, we assume it\rquote s a long jump disguised as an RTS, and call ProfileFnEnter instead. +\par \pard \widctlpar +\par \pard \widctlpar The profiler\rquote s call stack can (commonly) be popped to empty. This happens when the function that was executing when ProfileStart was called exits. If profiling is started from the PO +SER UI, this happens very often, so we do the best we can: create a new fake \ldblquote root\rdblquote for the call tree, representing the function we\rquote re return +ing to, and continue on. If profiling was started by the PROFILE_ONE_FN trick, then a pop to empty is considered exiting the target function, and profiling is turned off. +\par {\pntext\pard\plain\b\cchs0 2.3.14\tab}\pard\plain \s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 ProfileInterruptEnter +\par \pard\plain \widctlpar \f8 ProfileInterruptEnter does almost the same thing as ProfileFnEnter. The difference is that the current call is added to the \ldblquote interrupt\rdblquote root rather than the currently executing function, and the profile +\rquote s call stack pointer is pushed onto the profiler\rquote s interrupt stack. +\par {\pntext\pard\plain\b\cchs0 2.3.15\tab}\pard\plain \s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 ProfileInterruptExit +\par \pard\plain \widctlpar \f8 ProfileInterruptExit works much like ProfileFnExit, the calls stack\rquote s record for the interrupt \ldblquote function\rdblquote is popped. Unlike with RTS, RTE is reliably matched with an interrupt exit, so it\rquote +s not necessary to do the funny call stack searching. However, when the RTE executes it\rquote +s possible that there may still be some unmatched calls (JSRs) that were executed as part of processing the interrupt. (The kernel does this regularly.) So we make sure to pop all the functions off the profiler\rquote +s call stack until we get to the one indicated by the profiler\rquote s interrupt stack. +\par \pard \widctlpar +\par The Palm OS trap handler performs trap calls by pushing stuff on the CPU stack so that the RTE will jump to the real function (and then later be able to do an RTS from that fn to get back to the code that executed the TRAP interrupt.) + To handle this, the RTE destination is compared to the PC that was saved when the interrupt happened, and if they addresses don\rquote t match then ProfileFnEnter is called to track the \rdblquote fake\rdblquote function entry. +\par +\par {\pntext\pard\plain\b\fs36\cchs0 3.\tab}\pard\plain \s1\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl1\pndec\pnprev1\pnstart1\pnsp144 {\pntxta .}}\b\f8\fs36 Using the Profiler +\par {\pntext\pard\plain\b\i\fs28\cchs0 3.1\tab}\pard\plain \s2\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl2\pndec\pnprev1\pnstart1\pnsp144 }\b\i\f8\fs28 POSER UI +\par \pard\plain \widctlpar \f8 You actually don't have to do anything at all to set up your app for profiling. That's the beauty of having the emulator handle profiling--all the work can happen "between cycles" It\rquote +s a good idea to set the compiler switch so that the debug symbols get embedded in your code, otherwise you won't be able to identify your functions in the output. For the +ROM, debug symbols are not necessary if a ROM.map file is available. The ROM.map file will be used first, and if the function is not present then the debug symbols will be used. +\par \pard \widctlpar +\par To do a profiling run: +\par {\pntext\pard\plain\f1\cchs0 \'b7\tab}\pard \fi-360\li360\widctlpar{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}Launch the Mac version of the emulator. +\par {\pntext\pard\plain\f1\cchs0 \'b7\tab}Load the app or otherwise set up the situation to be profiled +\par {\pntext\pard\plain\f1\cchs0 \'b7\tab}Select "Start" from the profiling menu or press cmd-[ +\par {\pntext\pard\plain\f1\cchs0 \'b7\tab}Do the profiled thing +\par {\pntext\pard\plain\f1\cchs0 \'b7\tab}Select "Stop" from the profiling menu, or press cmd-] +\par {\pntext\pard\plain\f1\cchs0 \'b7\tab}Select "Dump" from the profiling menu, or press cmd-\\ +\par \pard \widctlpar +\par \pard \widctlpar You can start and stop more than once before dumping the results. The profile data gathered in each start/stop pair will be added into that gathered in previous pairs. +\par \pard \widctlpar +\par \pard \widctlpar When you dump the result, you'll find a file in the emulator directory called "POSER Profile Results". At the moment, you have to change the type and creator to 'proF' so the Metrowerks profile will open it. Once that\rquote +s done, just double-click it, or otherwise convince the "MW Profiler" app to open it. See Reading the Results below. +\par \pard \widctlpar +\par \pard \widctlpar When you profile this way, the profiler buffers are predefined in Profiling.h. Currently they\rquote +re set to 20000 functions with a max stack of 200 functions. That's enough to profile booting a ROM, and plenty for repetetive operations, but it quickly gets used up if you do gremlins. + (A few hundred gremlins will generate 20000 unique function calls.) +\par \pard \widctlpar +\par {\pntext\pard\plain\b\i\fs28\cchs0 3.2\tab}\pard\plain \s2\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl2\pndec\pnprev1\pnstart1\pnsp144 }\b\i\f8\fs28 From Your App +\par \pard\plain \widctlpar \f8 You can Init, Start, Stop, Dump, and Cleanup the POSER profiler from application code, much like you can for the Metrowerks profiler for Mac. To do this, #include \ldblquote EmuTraps.h\rdblquote and #include \ldblquote +EmuProfiling.h\rdblquote in the module that will control the profiler. (You might want to put EmuProfilingNOPs.c in the project for simulator builds only, so that the profiling functions will be stubbed out there.) The APIs are described below. +\par \pard \widctlpar +\par {\pntext\pard\plain\b\cchs0 3.2.1\tab}\pard\plain \s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 ProfileInit +\par \pard\plain \s34\fi-1710\li1710\widctlpar\tx360\tx720\tx1080\tx1440\tx1710\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 \f3\fs20 void ProfileInit(int maxCalls, int maxDepth) +\par \pard\plain \widctlpar \f8 \tab maxCalls - the number of function call buffers to allocate +\par \tab maxDepth - the number of stack frames to allocate +\par \pard \widctlpar This allocates the profile buffers within the POSER memory partition. It must be done prior to calling any other profiling function. +\par {\pntext\pard\plain\b\cchs0 3.2.2\tab}\pard\plain \s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 ProfileStart +\par \pard\plain \s34\fi-1710\li1710\widctlpar\tx360\tx720\tx1080\tx1440\tx1710\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 \f3\fs20 void ProfileStart() +\par \pard\plain \widctlpar \f8 Begin profiling at that point in the code. The instructions executed within the function that calls ProfileStart will appear in the result in a function body under the label \ldblquote partial\rdblquote +, as will any code executed by calling functions if ProfileStop is not called when the function that called ProfileStart exits. +\par {\pntext\pard\plain\b\cchs0 3.2.3\tab}\pard\plain \s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 ProfileStop +\par \pard\plain \s34\fi-1710\li1710\widctlpar\tx360\tx720\tx1080\tx1440\tx1710\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 \f3\fs20 void ProfileStop() +\par \pard\plain \widctlpar \f8 Stop profiling at that point in the code. In general, it\rquote +s a good idea to start and stop profiling at the same level, but that is not required. If you stop while nested deeper than where you started, all the functions still on the call stack will be pop +ped as if they had exited at the point ProfileStop was called. +\par {\pntext\pard\plain\b\cchs0 3.2.4\tab}\pard\plain \s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 ProfileDump +\par \pard\plain \s34\fi-1710\li1710\widctlpar\tx360\tx720\tx1080\tx1440\tx1710\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 \f3\fs20 void ProfileDump() +\par \pard\plain \widctlpar \f8 Dumps the accumulated results to a file called \ldblquote POSER Profile Results\rdblquote . (Future versions should allow you to pass the file name as an argument to ProfileDump.) +\par {\pntext\pard\plain\b\cchs0 3.2.5\tab}\pard\plain \s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 ProfilePrint +\par \pard\plain \s34\fi-1710\li1710\widctlpar\tx360\tx720\tx1080\tx1440\tx1710\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 \f3\fs20 void ProfilePrint() +\par \pard\plain \widctlpar \f8 A debugging function. Prints the profile results as text to POSER\rquote s Log file. Can be very slow. +\par {\pntext\pard\plain\b\cchs0 3.2.6\tab}\pard\plain \s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 ProfileCleanup +\par \pard\plain \s34\fi-1710\li1710\widctlpar\tx360\tx720\tx1080\tx1440\tx1710\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 \f3\fs20 void ProfileCleanup() +\par \pard\plain \widctlpar \f8 Free up the data structures allocated by ProfileInit. +\par +\par {\pntext\pard\plain\b\fs36\cchs0 4.\tab}\pard\plain \s1\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl1\pndec\pnprev1\pnstart1\pnsp144 {\pntxta .}}\b\f8\fs36 Reading the Results +\par \pard\plain \widctlpar \f8 The profiler dumps the results in a format compatible with Metrowerks profiler. This format was reverse engineered, and is incompletely described in Appendix B. +\par \pard \widctlpar +\par \pard \widctlpar +Times are all theoretically in millisecond for a 16.580608 MHz clock. The times are written to the output file as 64-bit integers of clocks, and a multiplier is applied to scale the result to milliseconds based on the clock speed. 5661.518 is a bit over + 5 1/2 seconds, and 1.255 is a bit over 1 1/4 milliseconds. (In theory at least, I'm still validating the data, if you see anything that strikes you as inaccurate, please tell me about it!) +\par \pard \widctlpar +\par \pard \widctlpar The header in the output file can be ignored. The Overhead field actually contains the number of cycles spent in interrupts, which should be identical to the +Children column for the interrupts block. +\par \pard \widctlpar +\par The first column contains the function name, with these special cases: +\par \pard \fi-1440\li2160\widctlpar functions\tab a top-level cover that includes all regular function calls +\par interrupts\tab a top-level node that includes all interrupts (except the ones POSEr has patched out) +\par \pard \fi-1440\li2160\widctlpar partial\tab means profiling was started in the middle of the function, so we don't have the address of the fn and consequently don't have a name. +\par overflow\tab a lump of all functions called when we're out of space to track more unique calls, where unique means called from the same path to the "root" of the call tree. +\par \pard \fi-1440\li2160\widctlpar unknown\tab a function for which no name could be found. Many functions in .prc files show up as unknown. +\par \pard \widctlpar +\par The rest of the names all take the form "Name $address.x" where: +\par Name- is the name of the function or trap. +\par address-For regular functions, the 4 byte address. +\par \tab -For traps, the 2 byte trap number. +\par \tab -For interrupts, the 1 byte interrupt number. +\par x- debugging info, indicating where the name information came from: +\par \tab 't' = trap names table built in POSER, +\par \tab 'm'= the ROM.Map file found in the same directory as POSER +\par \tab 'd'=the debug symbol appended to the function\rquote s instructions by the compiler +\par \tab 'i'=invalid address flag (usually due to POSERs implementation internals) +\par +\par The other columns are defined as follows. Note MINIMUM and STACK SPACE are NOT what you expect: +\par +\par {\b count} - the number of times the functions was called. +\par +\par {\b only} - time spent in the function, not counting child fns or interrupts. +\par +\par {\b %} (by only) - percentage of total profiling time spent in this fn/call. +\par +\par {\b +Children} - time spent in the function including child fns, but not including interrupts +\par +\par {\b %} (by +Children) - percentage of total profiling time spent in the fn and its kids +\par +\par {\b Average} - "Only" divided by "count" +\par +\par {\b Maximum} - the maximum time (in msec) spent in any 1 call to the fn. +\par +\par \pard \widctlpar {\b Minimum} - {\i NOT WHAT YOU EXPECT}. This is actually the time spent handling interrupts for calls to that particlular instance of that fn. Due to the way the "Summary" is calculated, this number won't be correct in summary views. + +\par \pard \widctlpar +\par \pard \widctlpar {\b Stack space} - {\i NOT WHAT YOU EXPECT} +. More of a trap/interrupt counter plus some debug info. The number in that field for a particular fn entry is incremented by 1 every time the fn is interrupted, by 10000 if the fn call is made by a faked up RTS instead of a JSR, and 1000 if the functio +n was executing when an RTS occurred that didn't return to it's called but instead returned to some fn farther up the call chain. Again, this will only be useful in the detail view, since the summary does some computation on it. +\par {\pntext\pard\plain\b\fs36\cchs0 5.\tab}\pard\plain \s1\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl1\pndec\pnprev1\pnstart1\pnsp144 {\pntxta .}}\b\f8\fs36 Appendix A - Profiling Includes +\par {\pntext\pard\plain\b\i\fs28\cchs0 5.1\tab}\pard\plain \s2\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl2\pndec\pnprev1\pnstart1\pnsp144 }\b\i\f8\fs28 EmuTraps.h +\par \pard\plain \s34\fi-1710\li1710\widctlpar\tx360\tx720\tx1080\tx1440\tx1710\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 \f3\fs20 /********************************************************************* +\par \pard \s34\fi-1710\li1710\widctlpar\tx360\tx720\tx1080\tx1440\tx1710\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 * +\par * Copyright (c) 1998 +\par * 3Com/Palm Computing Division. All rights reserved. +\par * +\par * Redistribution and use in source and binary forms, with or without +\par * modification, are permitted provided that the following conditions +\par * are met: +\par * +\par * 1. Redistributions of source code must retain the above copyright +\par * notice, this list of conditions and the following disclaimer. +\par * +\par * 2. Redistributions in binary form must reproduce the above +\par * copyright notice, this list of conditions and the following +\par * disclaimer in the documentation and/or other materials provided +\par * with the distribution. +\par * +\par * 3. All advertising materials mentioning features or use of this +\par * software must display the following acknowledgement: +\par * +\par *\tab \tab This product includes software developed by 3Com and its +\par *\tab \tab contributors. +\par * +\par * 4. Neither 3Com nor the names of its contributors may be used to +\par * endorse or promote products derived from this software +\par * without specific prior written permission. +\par * +\par * THIS SOFTWARE IS PROVIDED BY THE 3COM AND CONTRIBUTORS ``AS IS'' +\par * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +\par * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +\par * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 3COM OR +\par * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +\par * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +\par * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +\par * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +\par * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +\par * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +\par * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +\par * OF SUCH DAMAGE. +\par * +\par *******************************************************************/ +\par #pragma once +\par +\par #define\tab emuTrapBase\tab \tab \tab 0x0000 +\par +\par typedef enum \{ +\par \tab emuTrapProfileInit = emuTrapBase, +\par \tab emuTrapProfileStart, +\par \tab emuTrapProfileStop, +\par \tab emuTrapProfileDump, +\par \tab emuTrapProfileCleanup, +\par +\par \tab // WARNING!! LEAVE THIS ONE AT THE END AND ALWAYS ADD NEW TRAPS TO +\par \tab // THE END OF THE TRAP TABLE BUT RIGHT BEFORE THIS TRAP!!!!!!!!! +\par \tab emuTrapEmuReserved1, +\par \tab emuTrapEmuReserved2, +\par \tab emuTrapEmuReserved3, +\par \tab emuTrapEmuReserved4, +\par \tab +\par \tab emuTrapLastTrapNumber +\par \tab \} EmuTrapNumber; +\par +\par +\par #define emuTrapNum\tab \tab \tab \tab 0x0E\tab \tab // Emulator trap +\par +\par #define EMU_TRAP(trapNum) \\ +\par \tab TWOWORD_INLINE(m68kTrapInstr+emuTrapNum,trapNum) +\par +\par #define ASM_EMU_TRAP(trapNum)\tab \\ +\par \tab \tab \tab DC.W\tab m68kTrapInstr+emuTrapNum; \\ +\par \tab \tab \tab DC.W\tab trapNum +\par \pard \s34\fi-1710\li1710\widctlpar\tx360\tx720\tx1080\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 +\par {\pntext\pard\plain\b\i\fs28\cchs0 5.2\tab}\pard\plain \s2\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl2\pndec\pnprev1\pnstart1\pnsp144 }\b\i\f8\fs28 EmuProfiling.h +\par \pard\plain \s34\fi-1710\li1710\widctlpar\tx360\tx720\tx1080\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 \f3\fs20 /********************************************************************* +\par \pard \s34\fi-1710\li1710\widctlpar\tx360\tx720\tx1080\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 * +\par * Copyright (c) 1998 +\par * 3Com/Palm Computing Division. All rights reserved. +\par * +\par * Redistribution and use in source and binary forms, with or without +\par * modification, are permitted provided that the following conditions +\par * are met: +\par \pard \s34\fi-1710\li1710\widctlpar\tx360\tx720\tx1080\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 * +\par \pard \s34\fi-1710\li1710\widctlpar\tx360\tx720\tx1080\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 * 1. Redistributions of source code must retain the above copyright +\par * notice, this list of conditions and the following disclaimer. +\par * +\par * 2. Redistributions in binary form must reproduce the above +\par * copyright notice, this list of conditions and the following +\par * disclaimer in the documentation and/or other materials provided +\par \pard \s34\fi-1710\li1710\widctlpar\tx360\tx720\tx1080\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 * with the distribution. +\par \pard \s34\fi-1710\li1710\widctlpar\tx360\tx720\tx1080\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 * +\par * 3. All advertising materials mentioning features or use of this +\par * software must display the following acknowledgement: +\par * +\par *\tab \tab This product includes software developed by 3Com and its +\par *\tab \tab contributors. +\par * +\par * 4. Neither 3Com nor the names of its contributors may be used to +\par * endorse or promote products derived from this software +\par * without specific prior written permission. +\par * +\par * THIS SOFTWARE IS PROVIDED BY THE 3COM AND CONTRIBUTORS ``AS IS'' +\par * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +\par * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +\par * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 3COM OR +\par * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +\par * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +\par * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +\par * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +\par * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +\par * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +\par * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +\par * OF SUCH DAMAGE. +\par * +\par *******************************************************************/ +\par #pragma once +\par +\par #include "EmuTraps.h" +\par +\par void ProfileInit(int maxCalls, int maxDepth) +\par \tab \tab \tab EMU_TRAP(emuTrapProfileInit); +\par +\par void ProfileStart() +\par \tab \tab \tab EMU_TRAP(emuTrapProfileStart); +\par +\par void ProfileStop() +\par \tab \tab \tab EMU_TRAP(emuTrapProfileStop); +\par \pard \s34\fi-1710\li1710\widctlpar\tx360\tx720\tx1080\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 +\par \pard \s34\fi-1710\li1710\widctlpar\tx360\tx720\tx1080\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 void ProfileDump() +\par \tab \tab \tab EMU_TRAP(emuTrapProfileDump); +\par +\par void ProfileCleanup() +\par \tab \tab \tab EMU_TRAP(emuTrapProfileCleanup); +\par +\par \pard \s34\fi-1710\li1710\widctlpar\tx360\tx720\tx1080\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 +\par {\pntext\pard\plain\b\i\fs28\cchs0 5.3\tab}\pard\plain \s2\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl2\pndec\pnprev1\pnstart1\pnsp144 }\b\i\f8\fs28 EmuProfilingNOPs.c +\par \pard\plain \s34\fi-1710\li1710\widctlpar\tx360\tx720\tx1080\tx1440\tx1710\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 \f3\fs20 // stub out the functions for simulator builds only +\par \pard \s34\fi-1710\li1710\widctlpar\tx360\tx720\tx1080\tx1440\tx1710\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 +\par void ProfileInit(int maxCalls, int maxDepth) \{return;\} +\par void ProfileStart() \{return;\} +\par void ProfileStop() \{return;\} +\par void ProfileDump() \{return;\} +\par void ProfilePrint() \{return;\} +\par void ProfileCleanup() \{return;\} +\par {\pntext\pard\plain\b\fs36\cchs0 6.\tab}\pard\plain \s1\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl1\pndec\pnprev1\pnstart1\pnsp144 {\pntxta .}}\b\f8\fs36 Appendix B - Metrowerks Profiler File Format +\par \pard\plain \widctlpar \f8 +The profile output file is composed of three sections. A header section of 0x200 bytes, then a section of FnCallRecord structures containing an array of function data, followed by a string table containing the names of each function. T +he functions are represented in a tree, where each node represents a given function when called from a particular path to the root of the tree. That is, if A calls C and B calls C, then there will be at least 2 records in the tree representing calls to C +, once when called from A and another when called from B. I say at least 2 because A and B themselves may be called from multiple places, and each unique version of A and B will also have a unique child node representing C. +\par {\pntext\pard\plain\b\cchs0 6.1.1\tab}\pard\plain \s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 Header +\par \pard\plain \widctlpar \f8 The header section contai +ns things like the number of functions in the function data array, and offset to the start of the string table, the size of the string table, and the record number (array index) of the root node in the function tree. +\par \pard \widctlpar +\par \pard\plain \s34\fi-1714\li1714\keepn\widctlpar\tx360\tx720\tx1080\tx1440\tx1710\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 \f3\fs20 struct ProfFileHeader \{ +\par \pard \s34\fi-1714\li1714\keepn\widctlpar\tx360\tx720\tx1080\tx1440\tx1710\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 \tab UInt32\tab proF;\tab \tab \tab \tab \tab // 'proF' +\par \tab UInt32\tab version;\tab \tab \tab \tab // 0x00040002 +\par \tab UInt32\tab fnCount;\tab \tab \tab \tab // number of unique fns (records) in log +\par \tab UInt32\tab four;\tab \tab \tab \tab \tab // 0x00000004 +\par +\par \tab UInt32\tab zeros1;\tab \tab \tab \tab // 0x00000000 +\par \tab UInt32\tab zeros2;\tab \tab \tab \tab // 0x00000000 +\par \tab UInt32\tab unknown;\tab \tab \tab \tab // 0xB141A3A9\tab - maybe timebase data +\par \tab UInt32\tab recordsSize;\tab \tab // size of header plus size of data (or offset to string table) +\par \tab +\par \tab UInt32\tab stringTableSize;\tab // size of string table in bytes +\par \tab UInt64\tab overhead;\tab \tab \tab // count for overhead +\par \tab Int32\tab rootRec;\tab \tab \tab \tab \tab // record number of root of tree +\par \tab +\par \tab UInt32\tab sixtyfour1;\tab \tab \tab // 0x00000064 +\par \tab UInt32\tab sixtyfour2;\tab \tab \tab // 0x00000064 +\par \tab UInt32\tab countsPerTime; \tab // translation between counts at nodes and integers in column +\par \tab \tab \tab \tab \tab \tab \tab \tab \tab \tab \tab // 0x00FD0000 = 16.580608 MHz with display in seconds +\par \tab \tab \tab \tab \tab \tab \tab \tab \tab \tab \tab // 0x000040C4 = 16.580608 MHz with display in milliseconds +\par \pard \s34\fi-1714\li1714\keepn\widctlpar\tx360\tx720\tx1080\tx1440\tx1710\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 \tab UInt32\tab oddstuff0;\tab \tab \tab // seems like it can be 0, set by profiler tool itself + +\par \pard \s34\fi-1714\li1714\keepn\widctlpar\tx360\tx720\tx1080\tx1440\tx1710\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 \tab +\par \tab UInt32\tab oddstuff1;\tab \tab \tab // seems like it can be 0, set by profiler tool itself +\par \tab UInt32\tab oddstuff2;\tab \tab \tab // seems like it can be 0, set by profiler tool itself +\par \tab UInt32\tab oddstuff3;\tab \tab \tab // seems like it can be 0, set by profiler tool itself +\par \tab UInt32\tab oddstuff4;\tab \tab \tab // seems like it can be 0, set by profiler tool itself +\par +\par \pard \s34\fi-1714\li1714\keepn\widctlpar\tx360\tx720\tx1080\tx1440\tx1710\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 \tab Byte\tab unused[0x200 - 0x50];\tab // for 0x200 bytes +\par \pard \s34\fi-1710\li1710\widctlpar\tx360\tx720\tx1080\tx1440\tx1710\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 \}; +\par \pard \s34\fi-1710\li1710\widctlpar\tx360\tx720\tx1080\tx1440\tx1710\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 +\par {\pntext\pard\plain\b\cchs0 6.1.2\tab}\pard\plain \s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 Function Array +\par \pard\plain \widctlpar \f8 Following the header (starting + at offset 0x200 in the file) is an array of header.fnCount structs as defined below. Each struct represents a unique node in the tree. Most of these values are straightfoward, and appear in the results view representing what you expect. The sib and ki +d records determine the relationship to other functions in the tree. Children of a given node are found by looking at the node\rquote s kid field to find the first child, then look at the child\rquote +s sib field to find the adjacent nodes which are all considered children of the first kid\rquote s parent. If the sib or kid contain -1 then there are no sibling or children nodes. +\par \pard \widctlpar +\par \pard\plain \s34\fi-1714\li1714\keepn\widctlpar\tx360\tx720\tx1080\tx1440\tx1710\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 \f3\fs20 struct FnCallRecord \{ +\par \pard \s34\fi-1714\li1714\keepn\widctlpar\tx360\tx720\tx1080\tx1440\tx1710\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 \tab UInt32\tab name;\tab \tab \tab \tab +// also offset from start of name table to this fn's name +\par \tab UInt32\tab entries;\tab \tab \tab // times function was called +\par \tab UInt64\tab cyclesSelf;\tab \tab // profiling data for this fn alone +\par \tab UInt64\tab cyclesPlusKids;\tab // profiling data for this fn with kids +\par \tab UInt64\tab cyclesMin;\tab \tab // profiling data for this fn alone, min +\par \tab UInt64\tab cyclesMax;\tab \tab // profiling data for this fn alone, max +\par \tab Int32\tab \tab sib;\tab \tab \tab \tab // record number of sib, -1 for no sibs +\par \tab Int32\tab \tab kid; \tab \tab \tab \tab // record number of kid, -1 for no kids +\par \tab UInt32\tab stackUsed;\tab \tab // bytes of stack used by fn, we use it to count unmatched returns +\par \}; +\par \pard \s34\fi-1710\li1710\widctlpar\tx360\tx720\tx1080\tx1440\tx1710\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760 +\par {\pntext\pard\plain\b\cchs0 6.1.3\tab}\pard\plain \s3\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f8 String Table +\par \pard\plain \widctlpar \f8 +After the array of function records is a string table. This table contains the names of all the functions in the profiling output. Each function name appears only once, and all the nodes that represent that function will refer to the same string. Order + of strings within the string table is not important. +\par \pard \widctlpar +\par \pard \widctlpar T +he table is stores as adjacent C strings. That is, the first byte of the table is the first byte of the first string, and subsequent bytes contain the rest of the first string until a NULL (0) byte appears. Immediately after the terminator is the first +byte of the next string. +\par } \ No newline at end of file diff --git a/Docs/UsingPalmOSEmulator.pdf b/Docs/UsingPalmOSEmulator.pdf new file mode 100644 index 0000000..7e0ef9e Binary files /dev/null and b/Docs/UsingPalmOSEmulator.pdf differ diff --git a/Docs/_Bugs.txt b/Docs/_Bugs.txt new file mode 100644 index 0000000..8f31052 --- /dev/null +++ b/Docs/_Bugs.txt @@ -0,0 +1,116 @@ +======================================================================== +Bug List for the Palm OS Emulator +Copyright (c) 1999-2001 Palm, Inc. or its subsidiaries. +All rights reserved. + +Please send bug reports, comments, suggestions, etc. to + +======================================================================== + +This document contains the list of known significant bugs in the Palm +OS Emulator. This list is not complete -- many insignificant or +low-runner bugs have been omitted just to keep up the signal to noise +ratio. + +* Neil needs to receive cmdInitDatabase when his app is installed. + +* You can't reliably change the time with the Preferences App. The + time is generally synched with the host PC time. + +* It's not a good idea to load applications while the Launcher (the + "Applications" application) is running. If the program you're + loading doesn't already exist, it won't show up in the list of + installed application until you quit and restart Launcher. If the + application you're loading _does_ already exist, the Launcher won't + refresh it's list, and will end up with a stale reference to the + version you'd just replaced, leading to a Launcher crash. + +* We've seen one case where MacEmulator will draw the LCD area with a + white background in single-scale mode instead of green. The cause + of this problem appears to be with an out-of-date driver for a video + acceleration board. Unless this is an issue for you, we probably + won't try to figure out a workaround. + +* When working with an external debugger, make sure the ROM is awake + (and not sleeping with a blank screen). Otherwise, communication + between the two applications will not occur. + +* Selecting Pilot, PalmPilot, Palm III, or Palm VII as the device to + emulate always results in a PalmPilot being emulated. There are + very few side effects of this bug (for instance, a Pilot will now + indicate that it has backlighting) but fixing this problem will + probably cause more problems than it fixes (for instance, the Palm + VII OS would then think that it's on Palm VII hardware instead of + PalmPilot hardware and start trying to do Palm VII-specific things, + and crashing because there is little actual support for Palm VII + hardware). + +* When using NetLib redirection, NetLibSelect doesn't support the use + of sysFileDescStdIn or sysFileDescStdOut. + +* There is no IR emulation. + +* HotSync doesn't work on Visor devices. + +* Many operations will hang the emulator if performed when the + emulated power is off. These operations include -- but are not + limited to -- typing characters, clicking on the LCD area, running + Gremlins, and installing files. To be on the safe side, limit + yourself to clicking on the hard buttons and closing/quitting the + session. + +* Sound emulation doesn't work on the Mac. The facilities previously + used don't appear to be available under Carbon, and we haven't yet + found any alternatives. If you know about sound on the Mac, we + could use your help! + +* The English Output created by the minimization process is very + preliminary, rough, and incomplete. Some things to know: + + * Pen down-drag-up event sequences are reported as a series of + "Tap Pen" messages instead of "Press pen here, move to there, + and finally lift up". + + * The English output will likely contain many messages to "Tap + at x,y" instead of something more helpful like "Tap on button + called 'Foo'". That's because the code that determines what was + tapped on is incomplete. For instance, if the tap was on a menu + item, you'll get the generic tap message. + + * In the cases where a tap at a specific location can't be + related in terms for form objects or menu items, or where the + exact location in the form object is critical (for instance, in + the case of a scrollbar, where taps on the arrows are different + from taps on the main part of the scrollbar but are still + reported the same way), we hope to provide screen shots with + cross-hairs at the location you should tap. + + To address these shortcomings, you may want to do one of two things: + + * Help the Palm OS Emulator effort by modifying Poser's output + to be more accurate and expressive. The schedule for the next + release of Poser doesn't include time for Palm to address the + issues in-house. + + * Replay the events from the _Min.pev file. This + effectively carries out the steps described in the English + output. The drawback with this approach is that replaying + events also reloads the initial state that existed when the + events were generated. That is, you can't, say, start debugging + your application under CodeWarrior, replay the events until an + error occurs, and then break into the debugger. + + Enabling such a scenario may also be considered a third party + opportunity. + +* Certain versions of Windows (NT 4.0 and '95 for sure, don't know + about '98 or ME, but fixed in 2000 and XP) have a problem where they + can truncate the bottom of the Choose File common dialog. The amount + of this truncation (and even whether or not it occurs) is based on + the size an location of the topmost window when the dialog is + opened. If you are seeing this truncation, try moving the + underlying window or dialog up on the screen before opening the + Choose File dialog. + +* Single-stepping in Gremlins when there is no specified upper event + limit doesn't work. diff --git a/Docs/_Building.txt b/Docs/_Building.txt new file mode 100644 index 0000000..da10bfa --- /dev/null +++ b/Docs/_Building.txt @@ -0,0 +1,153 @@ +======================================================================== +Build Notes for the Palm OS Emulator +Copyright (c) 1999-2001 Palm, Inc. or its subsidiaries. +All rights reserved. + +Please send bug reports, comments, suggestions, etc. to + +======================================================================== + +======================================================================== +Windows +======================================================================== +To build the Palm OS Emulator under Windows, you will need Visual C++ +6.0. The Emulator runs under Windows 95, Windows 98, Window ME, Windows +NT 4.0, Window 2000, and Windows XP, so you should be able to build +under those environments, too. + +To build, simply load the workspace (Emulator.dsw) or project +(Emulator.dsp) from the BuildWin directory, select the project target +(you'll mostly likely be interested in building "Win32 Release"), and +select the the "Build/Build Emulator.exe" menu item. For that target, +the resulting executable will end up in +".../BuildWin/Release/Emulator.exe". + +If you want to build the ROM Transfer Palm OS application, you will need +CodeWarrior for Palm OS Release 7. + +======================================================================== +Macintosh +======================================================================== +To build the Palm OS Emulator under Mac OS, you will need CodeWarrior +Pro 7.0. + +To build, simply load the project Emulator.mcp in the BuildMac folder, +select the project target (you'll mostly likely be interested in +building "POSER PPC"), and select the the "Make" menu item. For that +target, the resulting executable will end up in "...:BuildMac:Built:Palm +OS Emulator". + +If you want to build the ROM Transfer Palm OS application, you will need +CodeWarrior for Palm OS Release 7. + +======================================================================== +Unix +======================================================================== + +(A cool HOWTO by Jan Schaumann can be found at: + + ) + +Palm OS Emulator for Unix has been built on a number of platforms, but +the one it's developed under is RedHat Linux 6.0 (kernel 2.2.5, +glibc-devel 2.1.1-6 using XFree86 3.3.3.1-49 running a 16 bit display). +People have also built it under SuSe Linux, Solaris 2.6 and 2.7, +FreeBSD, Debian, and QNX Neutrino, so you may have luck under those or +other environments. Developers using RedHat Linux 7.0 need to make sure +that they have the gcc compiler patch from RedHat. + + + +We use pthreads, so you need GNU glibc2 (aka Linux libc6) C library and +a 2.x kernel on a Linux system. Other operating systems need to support +true threads. + +The source makes heavy use of C++ templates and exceptions. On Linux, +you must have egcs-1.1.1 or better to compile it. egcs-1.1 or any gcc +below 2.95 may not work. RedHat Linux 6.0 comes with egcs 1.1.2, so you +should be OK there. If you are running RedHat Linux 5.2, you will need +to download the latest from and build it. For +other OS'es, either use egcs, or be sure your compiler supports these +C++ features. + +Note that egcs needs to be built with the HANDLE_SYSV_PRAGMA option +turned on in order to have the support to pack structures correctly. The +Linux version of egcs has this turned on, but other variants -- such as +the compiler that comes with FreeBSD -- may not. If you're using gcc +2.95 or later, make sure it was compiled with the HANDLE_PRAGMA_PACK +option. + +Sparc note: the Sparc assembler doesn't seem able to handle the mangled +C++ names emitted by GCC. You may have to follow the instructions in +the GCC FAQ "How to work around too long C++ symbol names?" + +Some versions of Linux are included with a version of gcc that cannot +correctly compile the emulator. It has a code generation bug that +causes the emulator to crash on startup. If you have gcc 2.96 or 2.97, +you probably have a version with the bug. Our configure script +attempts to detect compilers with the bug and invokes some workarounds +if it finds one. If those workarounds don't appear to be working for +you, you may want to revert to gcc 2.95.x or upgrade to gcc 3.0.x. Here +are instructions from one developer: + + What I did was compile gcc 2.95.3 --prefix=/usr/local/gcc2953 (ie, I + didn't destroy the 2.96 conpiler). Using that compiler (export + CC=/usr/local/gcc2953/bin/gcc, CXX=/usr/local/gcc2953/bin/g++), I + built glibc-2.2.2 and installed that in /usr/local. After that + completed, I put /usr/local/lib at the head of the search list in + /etc/ld.so.conf and rebooted. Then I compiled fltk and the emulator. + This time it worked. It may not be necessary to build the libraries + -- All I know is that it worked! + +We use the FLTK X toolkit. I'm not going to get into an X GUI Toolkit +religious war, so don't ask why not some other toolkit. You are +encouraged to add support for other toolkits, like Qt or GTK+ or even +Xt. I have tried to keep all of the FLTK code in the Em*Fltk.cpp files. +If you add support for another toolkit, please follow that pattern. +Don't pollute the UNIX-generic code with toolkit specific code. FLTK is +available from , is a quick download, and is easy +to build on a variety of OS'es. We've tested with the binary install +RPMs for 1.0.3 and 1.0.4, as well as the source install of 1.0.5 and +1.0.7. "fluid" (the FLTK User Interface Design tool) is part of the +build, so make sure it gets installed, too. + + NOTE: Not all FLTK's install the same way. Some install their + includes in an "Fl" directory, some install their includes in + an "FL" directory. The emulator is written to look for them + in "FL". If you don't have that directory, you may need to + create a symbolic link with that name to "Fl". + + Additionally, the Emulator's build script expects libfltk.a to + be installed in /usr/lib or /usr/local/lib. If you've + installed it elsewhere, use the --with-fltk=DIR configure + flag. The directory you specify will be used as the prefix + for additional "include" and "lib" dirs to search. + + NOTE: Many users have compiled against FLTK 1.0.11 with no + apparent problems, so using that version instead of 1.0.7 + should be OK. FLTK 1.1.0 (in beta at the time of this + writing) is only minimally supported. Emulator 3.5 includes + initial support for this version of FLTK, but little testing + has been performed. Our confidence is high that there are no + problems, but your mileage may vary. + +To build the Emulator, first build and/or install FLTK. Doing this +first is very important. Otherwise, the Emulator's build script won't +find it. After that, switch to the BuildUnix directory and execute +the following commands: + + ./configure + make + +You will end up with an application called "pose" that you can run. + +If you want, the "configure" script understands the following command- +line switches: + + --enable-palm-profile Include support for profiling Palm applications + --enable-profile Include support for profiling Poser itself + --enable-debug Include debugging symbols. This option also + turns on palm-profile, turns off profile, and + compiles the source code without optimizations. + --enable-static-link static link; no shared libraries (default no). + --with-fltk=DIR Use the fltk which is installed on DIR. diff --git a/Docs/_Contributing.txt b/Docs/_Contributing.txt new file mode 100644 index 0000000..89873f6 --- /dev/null +++ b/Docs/_Contributing.txt @@ -0,0 +1,176 @@ +======================================================================== +Contributing guidelines for the Palm OS Emulator +Copyright (c) 1999-2001 Palm, Inc. or its subsidiaries. +All rights reserved. + +Please send bug reports, comments, suggestions, etc. to + +======================================================================== + +The Palm OS Emulator is distributed under and protected by the GNU +GENERAL PUBLIC LICENSE (the full copy of which is found in _GPL.txt). +We make the source code available so that others can alter it for their +own needs. We do request you submit your changes back to us so that we +can merge them into the main version of the product, but there is no +requirement that you do so. Changes can be submitted to the current +maintainer () or Palm Developer +Support (). + +If you make changes and submit them back to us, all I ask is that you +follow a few guidelines. The general theme of these guidelines is to +follow the programming conventions you already find in the source code. +I don't want this thing to look like a patchwork quilt; it should look +like it was written by just one person. + +* Naming conventions: I use MacApp's naming conventions: + + Function names begin with upper case letters (e.g., SomeFunction). + + Private function names begin with "Prv" (e.g. PrvHelperFunction). + This includes static functions (local to a single file) and + private member functions. + + Local variables begin with lower case letters (e.g., myVariable). + + Global variables begin with a "g" (e.g., gCachedData). + + Data members begin with an "f" (e.g., fFieldOfDreams). However, + I'm flexible on this one. I think the UNIX guys are using + "_" for the UNIX-specific portions, and there are probably + still some Mac sections that use "m". + + Static data members begin with "fg" (e.g., fgDebuggerData). + + Constants start with a "k" (e.g., kTicksPerSecond). + + To help clean up the namespace a little bit, data types (classes, + structs, typedefs, etc.) and file names start with the "Em" + prefix. You may see a mix of this now in the sources, because + I'm slowly moving over to that convention. Using the "Em" + prefix for types is more "primitive" that using actual namespaces, + but it's simpler (easier to type). + + File guards are based on the name of the file, with the '.' replaced + with an underscore. Thus, the fileguard for EmWhizzyHeader.h is + EmWhizzyHeader_h. File guards are placed only in the header; they + are not used to control the inclusion of the header from another + file. + +* Use classes and objects only where it makes sense. There's no need + to go overboard. + +* You'll see some places where I use classes with all-static members + to emulate namespaces. This approach was used before CodeWarrior + supported namespaces. Now that it does, I've started using + namespaces. However, neither CodeWarrior Pro 5 nor VC++ 6.0 + support namespaces in their browsers, so choose which method you + like if you introduce a new namespace. + +* By convention, I use pointer types (e.g., "void*") for referencing + data in the host computer's space, and the UAE type "emuptr" to + reference data residing in the emulated Palm OS space. (This + comment may not make much sense now, but come back to it later + once you've looked over the sources and learned how Palm OS + memory is emulated.) + +* Braces go like this: + + if (...) + { + ... + } + + I use this approach because it is consistant with the bracing rules + for function bodies, it's easy to match up the begin and end of + a block, and because it's easy to comment out the "if" statement + in order to make the block unconditional. People trying to comment + out the "if" statement when it also includes the left brace at the + end have to deal with finding and commenting out the right brace + as well. + + The contents always move to the right. None of this in-and-out, + back-and-forth GNU stuff. + + I generally like to use braces even if there is only one line + in between them, but I'm not adamant about that. + +* One statement per line. None of this stuff: + + if (...) DoSomething(); + + I don't like the DoSomething() being on the same line, since that + makes it impossible to put a breakpoint on it. + +* Comment all functions using the following template: + + /*********************************************************************** + * + * FUNCTION: + * + * DESCRIPTION: + * + * PARAMETERS: none + * + * RETURNED: nothing + * + ***********************************************************************/ + + Not all functions are currently like this, but I'm working on that. + +* Call global functions using "::". E.g.: + + ::SomeGlobalFunction (); + + Again, not all of Poser sources follow this convention, but I'd + like to stick to it. + +* When calling non-static member functions from another function of the same + class or subclass, use "this->". When calling static member functions, + you may use "EmMyClass::" to prefix the function call. However, I'm not + really sure I like this latter convention, so use the prefix or not, as + you choice. + +* When referencing a data member, you may want to also use the "this->" + prefix. I currently don't use this much in Poser, preferring to use + the "f" prefix in the data member's name to indicate that it is a data + member. However, by using "this->", you can take advantage of VC++'s + type-completion features, which I'm finding to be really handy. + +* No platform-specific calls in the cross-platform files. If you find any + counter-examples to this rule, it's a bug. + +* Let's not go overboard with STL. Yes, I know you can write a MasterMind + program in one line with it (true!), but let's keen this sane. + +* Whitespace. Use lots of it! Vertically and horizontally! It's possible + to go overboard -- I knew one programmer who put spaces around every token + in his code, leading to stuff like: + + if ( myPtr -> mySubStruct . myField ) + { + for (ii = 0 ; ii < max ; ++ ii) + { + myObject -> CallSomeFunction ( ii * 2 ) ; + } + } + + But this is a bit extreme for me. I like putting braces on their own lines + for the vertical spacing, spaces in mathematical expressions, and spaces + between the function name and following parameter list, as well as the + places most other programmers put them. + + if (myPtr->mySubStruct.myField) + { + for (ii = 0; ii < max; ++ii) + { + myObject->CallSomeFunction (ii * 2); + } + } + +Anyway, I'm flexible on most of this stuff. These are merely guidelines. I'm +just asking that you keep them in mind if possible. + +Thanks, + +-- Keith Rollin +-- Palm OS Emulator engineer diff --git a/Docs/_Credits.txt b/Docs/_Credits.txt new file mode 100644 index 0000000..d42f661 --- /dev/null +++ b/Docs/_Credits.txt @@ -0,0 +1,219 @@ +======================================================================== +Credits for the Palm OS Emulator +Copyright (c) 1999-2001 Palm, Inc. or its subsidiaries. +All rights reserved. + +Please send bug reports, comments, suggestions, etc. to + +======================================================================== + +The Palm OS Emulator is currently a Palm Computing product. However, it +was not originally written by Palm Computing. Rather, it was developed +by outside developers, on their own time and without help from Palm +Computing. This product is a tribute to them, their perseverance, +their creativity and their ingenuity. We just stepped in after the hard +parts were done. + +------------------------------------------------------------------------ +* Greg Hewgill + + + Original Copilot, the basis for the Windows version of the Palm OS + Emulator. See the article "13hewgil.pdf" on how he developed + Copilot. + +------------------------------------------------------------------------ +* Craig Schofield + + + Macintosh port of Copilot, the basis for the Macintosh version of + the Palm OS Emulator. + +------------------------------------------------------------------------ +* Bernd Schmidt + + + UAE (UAE Amiga Emulator), which provides the 68000 CPU emulator + used at the core of Copilot. + +------------------------------------------------------------------------ +* Bruce Ashley Photography + Santa Cruz, Ca 831-429-8300 + email: ba@phot.com + + For the amazing skins. + +------------------------------------------------------------------------ +* Bill Spitzak and others + + + FLTK - Fast Light Tool Kit for Unix (and Windows and soon Mac). + +------------------------------------------------------------------------ +* Matthias Ulrich Neeracher + + + + GUSI -- the Grand Unified Sockets Interface for Macintosh. + +------------------------------------------------------------------------ +* John C. Daub + + CURLPushButton, used in the Mac emulator's About Box. + +------------------------------------------------------------------------ +* Quinn "The Eskimo" and Peter N Lewis, et al + + + Internet Config, the brains behind the hyperlinks in the Mac emulator's + stunning About Box. + +------------------------------------------------------------------------ +* Neil Rhodes + + Communications Toolbox support in Mac serial code. + +------------------------------------------------------------------------ +* Ron Marianetti + + Fixes and speedups to the TCP/debugger handling code. + +------------------------------------------------------------------------ +* Adam Dingle + + Conditional breakpoints. + Profiling output enhancements. + Display address of corruption in errors reporting corrupted heaps. + +------------------------------------------------------------------------ +* Jean-loup Gailly + + + gzip. + +------------------------------------------------------------------------ +* The Independent JPEG Group + + + JPEG decompression routines. + +------------------------------------------------------------------------ +* Jeff Prosise + + The CQuantize class for collecting palette colors from a 24-bit image. + + Algorithm from the August 1996 issue of Microsoft Systems Journal. + + + Source code from the October 1997 issue of Microsoft Systems Journal. + + +------------------------------------------------------------------------ +* Catherine White, Stuart Malone + + + Profiling code clean-ups. + Many excellent bug reports and analyses. + +------------------------------------------------------------------------ +* Jerry Kirk, Michael Kedl + + QNX Neutrino port. + Added serial port emulation code. + Added additional keyboard support. + Fixed massive memory leak. + +------------------------------------------------------------------------ +* Jon Fo + + Solaris 2.6/7 modifications. + +------------------------------------------------------------------------ +* Frank Yellin + + Solaris 2.6/7 modifications. + Many bug fixes to the NetLib redirection code. + +------------------------------------------------------------------------ +* Akhil Arora, Sun Microsystems + + For the long-term loan of an Ultra 2 Sparc system for Solaris + development. + +------------------------------------------------------------------------ +* Stefan Hoffmeister + + Borland C++ Builder port. + +------------------------------------------------------------------------ +* The traitor formerly known as the intern known as Jerry Lin + + Boggle sample program. + Gremlins Hordes. + Palm OS Emulator Binder. + Assorted other fit-only-for-an-intern tasks. + +------------------------------------------------------------------------ +* The intern known as Toshi Clark + + Eights sample program (cut down version of the 15 puzzle). + IR redirection. + Session Info dialog. + Horde stats. + SuperVZ emulation. + Initial MediaQ emulation. + Gremlin step/resume bug fixes. + Support for new (unreleased) Palm device. + Unique profile output file names. + International Strict Checks. + Initial Gremlin Minimization implementation. + +------------------------------------------------------------------------ +* Red Dutta + + "Export Database..." menu item. + +------------------------------------------------------------------------ +* Ben Darnell + + Debian port. + +------------------------------------------------------------------------ +* John Ludwig + + FreeBSD port. + +------------------------------------------------------------------------ +* Easy Software + + + FLTK Widget Set. + +------------------------------------------------------------------------ +* Scott Gruby + + + Carbon port. + +------------------------------------------------------------------------ +* Alexandre Parenteau + + + Carbonized GUSI 2.1.5. + +------------------------------------------------------------------------ +* Anthony Fishbeck + + + Design of plug-in architecture, and re-implementation of the + Emulator's system function patch system to make use of it. + +------------------------------------------------------------------------ +* Cooperative Computers, Inc. (Stuart Eichert, Justin Clark) + + + Gremlin Minimization enhancements. + +------------------------------------------------------------------------ +And thanks to the many users of the Palm OS Emulator who have made +suggestions on how to make it even better! diff --git a/Docs/_GPL.txt b/Docs/_GPL.txt new file mode 100644 index 0000000..32d0e60 --- /dev/null +++ b/Docs/_GPL.txt @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/Docs/_News.txt b/Docs/_News.txt new file mode 100644 index 0000000..d478f8e --- /dev/null +++ b/Docs/_News.txt @@ -0,0 +1,71 @@ +======================================================================== +News (latest changes) for the Palm OS Emulator +Copyright (c) 1999-2001 Palm, Inc. or its subsidiaries. +All rights reserved. + +Please send bug reports, comments, suggestions, etc. to + +======================================================================== + +======================================================================== + REVISION HISTORY + + Starting in 2.1d25 (and backdated to 2.1d24) I'm giving credit + to the person or people responsible for convincing me to fix a + bug or add a feature, in some cases even providing the source code + for the bug or feature. These people's names appear in []'s. + + See the file Credits.txt for a list of people who have submitted + actual changes to the project. +======================================================================== + + +Changes for 3.5 (2001-03-29) +---------------------------- +* Added m125, m130, m515, and i705 support. NOTE: at the time of + this writing, skins for these devices are not available. There is + no estimated date for when they will be available. + +* Enabled TRGpro and HandEra330 support for Mac. [Scott Gruby] + +* Allow access to the following UI data structures in support of + PalmOSGlue that comes with SDK 4.0 Update 1 (DR1): + + read/write access to ControlType.attr for CtlGlueNewSliderControl + and CtlGlueSetLeftAnchor + + read access to ListType.itemsText for LstGlueGetItemsText + + read access to TableType.numColumns for TblGlueGetColumnMasked + + read access to GraphicControlType.bitmapID and selectedBitmapID for + CtlGlueGetGraphics + +* Re-allow read/write access to the text returned by CtlGetLabel, + etc. It's OK to read the text, and we'll allow writing to the text + until we come up with a better API for altering it. [many] + +* Fixed HostImportFileWithID to return a non-zero ID. [Scott Johnson] + +* Fixed timeout calculations when using redirected send/recieve + calls. [many] + +* (Windows) Poser 3.4 de-asserted DTR when opening the host serial + port. Poser 3.5 reverts this change (DTR is asserted when the host + serial port is opened). [many] + +* Fixed problem with inability to set/change socket address/port in + serial port emulation redirection. [Mahendra Tailor] + +* (Mac) Better Mac OS X support (Quit menu item now respects + preferences regarding save-on-quit, and an idle Poser now gives more + time to other running processes). [Scott Gruby, Christopher Hunt] + +* (Unix) Fix the crawling dialogs (where dialogs appearing quickly in + succession march down the screen). [John Marshall] + +* When hostErrProfilingNotReady was added in Pose 3.1, it was done in + such a way as to change the value of hostErrUnknownError. Re-order + those two symbols so that hostErrUnknownError retains its original + value (at the expense of changing hostErrProfilingNotReady). [Scott + Johnson] diff --git a/Docs/_OldNews.txt b/Docs/_OldNews.txt new file mode 100644 index 0000000..3eca435 --- /dev/null +++ b/Docs/_OldNews.txt @@ -0,0 +1,6094 @@ +======================================================================== +News (latest changes) archive for the Palm OS Emulator +Copyright (c) 1999-2001 Palm, Inc. or its subsidiaries. +All rights reserved. + +Please send bug reports, comments, suggestions, etc. to + +======================================================================== + + +Changes for 3.4 (2001-02-01) +---------------------------- +* Interim internal release dates: + 3.4a1 - 2001-10-18 + 3.4a2 - 2001-11-01 + 3.4a3 - 2001-11-09 + 3.4a4 - 2001-11-13 + 3.4a5 - 2001-11-15 + 3.4b1 - 2001-11-20 + 3.4b2 - 2001-11-27 + 3.4b3 - 2001-11-29 + 3.4b4 - 2001-12-03 + 3.4b5 - 2001-12-05 + 3.4b6 - 2001-12-06 + 3.4b7 - 2001-12-10 + 3.4b8 - 2001-12-18 + 3.4b9 - 2002-01-21 + + +# Documentation: I don't think it's ever been documented what Poser + means by "Error" and "Warning" (as listed in the Logging Options + dialog). Now, with the Error Handling dialog (see below), it's more + important to know what those mean. Errors and Warnings are very + similar. The only difference between them is that an Error is + generally fatal (the Continue button is disabled in the dialog box + displaying the message) and a Warning is not (the Continue button is + enabled). Examples of Errors are Address Errors, Divide By Zero + Errors, or calls to SysFatalAlert. Examples of Warnings are Low + Memory accesses, Direct Screen accesses, and Hardware Register + accesses. Since Warnings are not fatal, they can generally be + turned off at the developer's option in the Debugging Options + dialog. + +* Documentation: The release notes for 2.1d16 refer to the "Autoload" + facility being added, but it doesn't describe the Autoload facility. + What it means is that you can create a directory in the same + directory as the Poser executable called Autoload. All installable + files in this directory (.prcs, .pdbs, and .pqas) will be installed + any time a new session is created or old session is loaded. + + This facility is superceded on Windows and Unix by the -load_apps + command line option. + +* Added support for cross-platform modeless dialogs. Not only does + this finally enable the Gremlin Control Window on Unix, but it paves + the way for enabling other features (such as importing files via the + Exchange Manager, which needs the progress window to be modeless). + +* Added Memory Leak detection, controlled by a new option in the + Debugging Options dialog. On SysAppExit, the Emulator looks for + memory leaks (much in the same way Palm OS 3.5 and later do). If it + finds any, it writes information about the leaks (including memory + location, memory contents, and a stack crawl of the context that + allocated the leaked block) to a log file. In either case, the Palm + OS-generated "you have leaks" dialog is suppressed. + +* Added Overlay Errors to the Debugging Options dialog. This option + controls a facility of the Overlay Manager in Debug ROMs. When + enabled, it sets the omFtrShowErrorsFlag bit of the omFtrCreator + Feature. When this bit is set, the Overlay Manager reports errors + with overlay databases that it can't validate (name of the overlay, + plus the reason why it didn't validate properly). + +* When a Gremlin is running, all generated events are now saved to a + Palm Event (.pev) file. This event file contains a snapshot of the + initial session state along with a list of all the events that + Gremlins generated. The event file can be used for event playback + or event minimization (see below). + +* Added a Replay menu item that re-opens a Palm Event file and + replays all the events recorded in it. This is handy if the events + in the file lead to an error condition you'd like to create. It is + similar to running the same Gremlin on the same application over + again, except that instead of regenerating the same random events to + post to the application, the events are read from a file. + +* Added Minimization menu item. This feature also re-opens a Palm + Event file and replays the events in it. Additionally, it goes + through an iterative process of removing ranges of events and seeing + if the resulting subset of events still leads to a crash. If a + crash still occurs, then those events are permanetly removed from + the set of events and another range of events is similarly tested. + If a crash does NOT occur, then the removed events are put back and + again the iterative process tries again by removing another range of + events. The end result is a minimal set of events that reproduce a + crash. This set of events is saved to a new Palm Event file + (suitable for execution using the Replay menu item). As a final + step, the set of events is translated into a sequence of English + instructions suitable for a human to follow. + + The amount of time it takes to complete the minimization process can + vary wildly, depending on the speed of your application, how many of + the events in the initial set are required in the final set, where + those events are located in the initial set, etc. In the lab, one + particular 265 event set minimized to 9 events in 50 seconds, and a + 1200 event set minimized to 18 in 11 1/2 minutes. I've heard + reports that starting with an initial set of 2000 to 3000 events + takes a couple of hours. + + See _Bugs.txt for comments on the English output. + +* Added -minimize command-line option. This option takes a path to + a .pev file with an event set to minimize. After the minimization + has completed, the files are written out as normal and the + emulator exits. + +* Cleaned up methods for specifying how serial, IR, and and NetLib + data are redirected. + +* Support setting Trap break from PalmDebugger when executing 'atb + A###'. Poser had a bug leading it to support only 'atb + "FredFunction"' + +* Further restricted direct access to data structures. Poser allows + NO access if the OS supports an "accessor" function that provides + access to the remaining fields Palm wants to support. + +* Allow read access to "attr" fields of Control, List, Bitmap, Label, + and Scrollbar objects if the "accessor" function is not available -- + FrmGlueGetObjectUsable accesses those fields. FrmGlueGetObjectUsable + also accesses Gadget and Table objects, but Poser already allows + read access to "attr" for those objects. [Catherine White] + +* Cleaned up New Session dialog behavior in the face of missing or + unusable ROM files. + +* Converted dates in _OldNews.txt to John Marshall-approved ISO 8601 + format. + +* (Mac) Fixed bug leading to crash while displaying the "invalid ROM + checksum" error message. + +* Better UART support: all FIFO interrupts supported, all FIFO sizes + correct. + +* Tweaks to configure.in to better find GL and FLTK libraries. Look + in $ac_x_libraries when searching for GL libraries, and look in + $ac_x_libraries (instead of $x_libraries) and GLLIB when looking for + FLTK and making sure it has fl_height(). [wart@kobold.org] + +* (Unix) Additional gcc 3.0 compatibility. [John Marshall] + +* (Unix) Work around gcc 2.95.x and 2.96.x bugs, where they had + problems compiling an inline function taking a parameter with a + default value that involved calling a virtual function. [John + Marshall] + +* Removed uses of ## operator with a token only on the right-hand + side. This usage is unnecessary and its effect is undefined. [John + Marshall] + +* (Mac) Updated to CodeWarrior 7. + + * Updated projects. + + * Added LTimerTask.cp and LTimerTaskFunctor.cp to PowerPlant + project. + + * Added CarbonFrameworkLib to Poser targets. + + * Removed CustomTextColorCDEF.cp from PowerPlant project. + + * Removed LAMTabsControlImp.cp from PowerPlant project. Register + LAMControlImp instead of LAMTabsControlImp. + + * Because LTableView has fixed its problems with setting its + background to white, removed custom CWhiteTextColumn class, + reverting back to using LTextColumn. Also Removed + LColorEraseAttachments from ppobs. + + * Because LAMControlImp now supports > 255 characters, removed + LFixedAMStaticTextImp. + + * Because LDialogBox now handles default buttons better, removed + LFixedDialogBox. Instead, use custom LNotifierDialogBox so that + we can catch when the dialog box is being closed and notify our + dialog handling routines. + + * Undeffed EAGAIN and EDEADLK in GUSI's errno.h (defined in + ) so that it can get redefined in GUSI's sys/errno.h. + + * In GUSI's inttypes.h, include stdint.h instead of defining the + C99 standard integer types itself. + + * In GUSI's in.h, comment out IP_OPTIONS...IP_RCVIFADDR, since + they're now also defined in OpenTransportProviders.h + + * In GUSI's fcntl.h, make fdopen() match that in MSL's stdio.h + (actually stdio.posix.h) again. + + * Added back S64Mod macro removed from , needed in + GUSITimer.cp. + + * In GUSIOTNetDB.cp, don't #undef AF_INET. The idea in this file + was to undef it before including , which + defines it again. However, before undeffing that symbol, + GUSIOTNetDB.cp includes, which includes GUSIOTNetDB.h, which + includes GUSIOpenTransport.h, which includes + . Which means that + defines AF_INET before GUSIOTNetDB has a chance to undef it. + They both evaluate to 2 anyway, so duplicate #defines are OK. + + * Added PP_Suppress_Notes_22 to prefix files. + + * Specify LCleanupTask_Terminator as CFM Termination function. + + * CURLPushButton::AdjustCursorSelf -> AdjustMouseSelf. + + * Re-added definition of CRMRec, which is now surrounded by a + CALL_NOT_IN_CARBON flag in . + + * Re-added definitions of crmSerialDevice and CRMSerialRecord, + which are now surrounded by a CALL_NOT_IN_CARBON flag in + . + + * Changed EmAddressBank::check to checkaddr; now + defines "check". + + * Renamed some private functions in HostControl.cpp so that they + no longer started with "__" (thus conflicting with some system + functions now defined in MSL). + + * NewPPCCompProc -> NewPPCCompUPP. The former used to be a macro + in PPCToolbox.h that was defined to the latter. It's now + surrounded by a CALL_NOT_IN_CARBON, so we call NewPPCCompUPP + directly, which is defined in EmClassic.cpp. + + * ampCmd -> volumeCmd; freqDurationCmd -> rateMultiplierCmd; + squareWaveSynth -> ? (zero, for now). + + * Got rid of EmCustomWindow, making use of the new facilities for + creating an LWindow from an existing Mac window. + +* (Windows) Change the way Poser remembers and resets its location + when changing skins. Poser can be embedded in another application + (such as an IDE), and needs to be cognizant that its location is not + necessarily in screen coordinates. [Christian Falch] + +* (Unix) Added support for --enable-static-link (forces static + linking with libraries -- no shared libraries). [Harry Dolan] + +* Added preferences for controlling skin appearance (dimming when + inactive, red when in debug mode, green when in Gremlin mode). + +* Fixed some places where error codes caused by file operations got + mangled before they could be used to generate error messages. [John + Marshall] + +* (Unix) Protect against the window trying to fit itself to the size + of a skin when their's no skin being used. [John Marshall] + +* Fixed byteswapping bug in NetLibGetServByName when running on a + Little Endian platform and NetLib Redirection is on -- the returned + port would be byteswapped. [Maurizio Moretti] + +* Re-allow calls to the following functions (previously proscribed in + 3.3): SysReserved10Trap1, SysReserved30Trap1, SysReserved30Trap2, + SysReserved31Trap1, OEMDispatch, OEMDispatch2. It's possible for + OEMs to have implemented these traps, or for some version of the OS + or extension to have implemented them, in ways that Poser doesn't + know about. So allow access to them. If they are in fact not + implemented, then Poser's "you just called an unimplemented trap" + mechanism will kick in. SysReserved40Trap1, SysReserved40Trap2, + SysReserved40Trap3, and SysReserved40Trap4 should also be given the + same treatment, but they weren't on the proscribed list in the first + place. + +* The following functions are now also officially allowed: + IntlGetRoutineAddress, SerPrimeWakeupHandler, SerReceiveWindowClose, + SerReceiveWindowOpen, SerSetWakeupHandler, SrmOpenBackground, + SrmPrimeWakeupHandler, SrmReceiveWindowClose, SrmReceiveWindowOpen, + SrmSetWakeupHandler, SysNotifyBroadcast, SyNotifyBroadcastDeferred. + +* (Unix) Protect against Poser hanging when performing a "paste the + host selection to the Palm OS's clipboard" operation and there is no + host selection. [John Marshall] + +* Expanded on the ContinueOnWarnings and ExitOnErrors preferences + from Poser 3.3. These have now been replace with the preferences + WarningOn, WarningOff, ErrorOn, ErrorOff. These control what + happens with Warnings and Errors with Gremlins On and Off. Each + preference can be set to one of ShowDialog (which will show the + message in the familiar error dialog with the Continue, Debug, and + Reset buttons), Continue (which will make Poser act as if the user + had seen the dialog and pressed the Continue button, but will not + actually show the dialog), Quit (which will cause Poser to quit with + an error code of 1 if an error occurred or an error code of 2 if a + warning occurred), or NextGremlin (which will cause Poser to no + longer generate events for the current Gremlin and switch to the + next Gremlin in a Horde). Note that these actions take place ONLY + if logging is enabled for warnings and errors. If logging is not + enabled, then Poser enable them for you (asking you first if it's OK + to do so). + +* Added a new preferences dialog to support the setting of the + WarningOn, WarningOff, ErrorOn, and ErrorOff preferences. + +* ContinueOnWarnings and ExitOnErrors can no longer be set from the + UI, and their settings will not be saved to the preferences file. + However, they CAN be set from the Windows command line or via the + HostSetPreference function, and Poser will heed them. SilentRunning + was never setable from the UI, but its handling is also the same as + the ContinueOnWarnings and ExitOnErrors preferences (you can set it + via the command line or HostControl, and Poser will heed it). + +* Fixed crasher that could occur if the list of Palm applications in + the preferences used to limit what applications a Gremlin could run + included an application that no longer existed on the device. [John + Marshall] + +* Added DmNextOpenDatabase and DmOpenDatabaseInfo Perl wrappers. + Added ListOpenDatabases.pl. Added "#!/usr/bin/perl -w" to + FormSpy.pl, PoserRPC.pl, and SkipStartup.pl and made them executable + types. Fixed up warnings to due adding -w. Updated SkipStartup.pl + to skip the language selection form on EFIGS ROMs. [John Marshall] + +* (Internal) Massive rewrite of application model, document model, + and window model code. Created EmAction and EmActionHandler + classes, supporting the manipulation of actions/commands as objects, + thus allowing them to be queued up and/or deferred. These changes + allow for much sharing of cross-platform code, bring to parity many + features (such as command line options on Unix and Mac OS X). + +* Implied by the above, command line options are now supported on + Unix. They are not supported on the Mac as (a) Mac OS 9 doesn't + have a way to specify command line options, and (b) Mac OS X won't + launch Poser from the command line in a terminal. + +* Fixed problem that could lead to Poser hanging. Poser would from + time to time need to suspend emulation at a very safe, stable spot + in order to carry out some of its operations. This spot was when + EvtGetEvent was called and there were no pending events. However, + it was possible that an emulated process would be wedged or in an + infinite loop and wasn't calling EvtGetEvent. Poser would hang in + the process of waiting for that infinite loop to end. There was + another problem similar to this involving background processes, but + it's too complicated to get into here. Suffice to say that both + problems were solved by using a mechanism different from having + Poser wait for EvtGetEvent. [Vitaly Kruglikov, James Phillips, and + possibly some other engineers from Handspring] + +* (Mac) Added check for minimal Carbon version number. If Carbon is + not at least version 1.2.5, display an error message and exit. + +* (Mac) Added a top-level exception handler that displays a "Fatal + Internal Error" message and quits. + +* (Unix) Enabled most HandEra 330 support (code in + EmTRGDiskIO::GetFilePath is still not enabled). [Michael Glickman] + +* Added HostImportFileWithID. This is the same as HostImportFile, + but it returns the LocalID of the installed database. [Ben Combee] + +* Changed any references from "Cards" to "HostFS". The Card Options + dialog never did anything with emulating SD or any other sorts of + cards. It just allowed you to enter parameters for the HostFS + extension. Having it say "Cards" just confused people who expected + that the options specified there would have some effect on the Card + Info application in the Palm OS. + +* (Windows) Sped up startup time by assuming that the only files in + the Skins directory that can contain link information are those + ending in .lnk. + +* Recognize databases of type 'htal' as containing system code, and + don't complain if they do system-like things. This will allow + Network HotSync (when NetSync.prc is installed in RAM) to work + again. + +* Automatically create directories specified in command line options + as containers for Poser-generated files (such as Gremlin and logging + output) if they don't already exist. + +* Allow multiple file selection in the Install Application/Database + dialog. [Michael Nordstrom] + +* The directory created by Gremlins to hold the files it also creates + is now named with the current date/time instead of the number of + milliseconds since the host system was booted. + +* Bound Posers not longer care if the Skins directory exists. [Kelly + Maher] + +* Fixed bug in NetLibGetHostByName when NetLib Redirection is turned + on: attempting to return netDNSMaxAddresses addresses would result + in memory after "addressList" to get NULLed (that is, the first + element of the "address" array). The solution is to do the same + this as NetLib, which is to only return netDNSMaxAddresses-1 + address pointers. Note that Poser still differs from the on-device + NetLib, in that it will return only first netDNSMaxAddresses-1 + addresses in addition to the pointers to them, while the on-device + NetLib will return netDNSMaxAddresses addresses (with no pointer + to the last one). + +* Fixed bug with restarting a Gremlin from an intermediate Gremlin + state file (Gremlin_XXX_Event_XXXXXXXX.psf). Poser would silently + reset when the newly started Gremlin would attempt to generate an + event to switch to another application. [Rick Wagner] + +* Fixed bug where running a Gremlin Horde would not switch to the + next Gremlin when an error occurred. + +* Emulate DragonballVZ requirement for having the entire LCD frame + buffer in a 128K segment. [Scott Johnson] + + +Changes for 3.3 (2001-08-27) +---------------------------- +* Interim internal release dates: + 3.3a1 - 2001-06-15 + 3.3a2 - 2001-06-18 + 3.3a3 - 2001-07-10 + 3.3a4 - 2001-07-12 + 3.3a5 - 2001-07-13 + 3.3a6 - 2001-07-27 + 3.3b1 - 2001-08-02 + 3.3b2 - 2001-08-07 + 3.3b3 - 2001-08-13 + 3.3b4 - 2001-08-14 + 3.3b5 - 2001-08-20 + 3.3b6 - 2001-08-22 + +* Added Visor Edge support. [James Phillips] + +* Added HandEra 330 support. [Dan Fahrion] + +* Better checking for invalid database names as .prc, .pdb, and .pqa + files are installed. Error message now also includes more text + describing why the name is invalid. + +* When reporting invalid database dates when installing a file, now + include the name of the file containing the database. [David A. + Desrosiers] + +* Better error message when reporting that a .prc, .pdb, and .pqa + file cannot be installed because one of its resources or records is + too large. + +* Removed feature of Gremlins which would turn the device off and on + every once and a while. The mechanism used to perform this could + alter the emulated hardware timers and clocks, such that two runs of + the same Gremlin number would result in different outcomes. + +* NOTE: the following new feature was added to this release and then + disabled. "Beaming" over TCP or serial worked only intermittently. + We'll try to get this working in a future release. Until then, Mac + and Windows users will see a disabled IR option in the Preferences + dialog. Original release note was as follows: Limited IR emulation. + The user can choose to redirect IR data out the serial port or to + another instance of Poser running on the same computer. Note that + although TCP is used to exchange data between the to instances of + Poser, exchanging data between Posers running on different computers + is not supported. The network latency and transmission times is + greater than the timeout values used in IR communications, leading + to broken connections. + +* Include preliminary plug-in support. Current support extends to + letting external plug-ins patch traps and access memory. [Anthony + Fishbeck] + +* Internal change: continuing work to remove Dragonball-specific + assumptions from the source code in preparation for adding ARM + support. + +* Added support for downloading ROMs over USB on Mac and Windows. + + On Windows, you must have Palm Desktop 4.0.1 installed in order to + get the USB driver. You must then make the library for the driver + ("USBPort.dll") available to Poser. Either copy this library from + Palm Desktop's directory to Poser's directory, or move it into the + Windows system directory (thus making it available to all + applications). + + On the Mac, you must have Palm Desktop 2.6.3 installed in order to + get the USB driver. + + Note that the ROM Transfer application fails to work on Handspring + devices, so unless someone figures out why, you can't download those + ROMs. And though you can download Sony CLIE ROMs, Palm's version of + Poser doesn't emulate those devices, so performing that exercise is + not very useful. Which means that the addition of this feature is + of most benefit to those with Palm m500s and m505s. + +* Support backlighting (two levels of brightness) for m505. + +* Report direct access to BitmapType data structures. + +* Report calls to functions that will no longer be available on + future versions of Palm OS. This list appears at the end of this + note. + +* Corrected minimum RAM sizes for Palm m500 and m505 (was 2MB, now + 8MB). + +* (Mac) Added better support for transliterating characters exchanged + between the host and Palm OS emulated clipboard. + +* (Windows) The popup menu would always appear on the primary monitor + on a multi-monitor system. [David Vaportrails] + +* Palm m500/m505 alarm LED is green, not red. + +* (Unix) GCC 3.0 support: added where needed; no longer + assume vector::iterator is a pointer type; add exception + specifications where needed; recognize that "map" is in the std + namespace. [John Marshall] + +* (Windows) Added "Stay On Top" checkbox to Skins dialog. [Jonathan + Cox] + +* (Unix) Re-established X Windows window class (missing from Poser + 3.2). [Chris Ridd] + +* (Unix) Link with OpenGL if it is installed (required by FLTK). + [Holger Klawitter] + +* (Unix) SuSE 7.1 is rather pedantic and refuses to compile source + code containing calls to tmpnam in it. Therefore, on Unix, if + mkstemp is available, use that instead. Note that this mean that if + you call HostTmpNam to get a temp file name, be warned that the file + will already exist (but will still need to be opened). [Holger + Klawitter] + +* In Poser's implementations of NetLibSend, NetLibSendPB, + NetLibReceive, NetLibReceivePB, and NetLibDmReceive (used when + NetLib redirection is turned on), no longer try to be clever about + when to call send vs. sendto or recv vs recvfrom. Instead, always + call sendto and recvfrom. That should provide the same + characteristics as the Palm OS NetLib calls. [Gary Gorsline] + +* In order to support the various options in the Reset dialog, Poser + emulates the pressing of the appropriate hard keys. Pressing the + key down worked fine, but Poser's determination of when to release + the key wasn't always correct, and the Palm OS would sometimes fail + to notice that the key was ever down. Poser now tries a different + approach that should be more definitive. [Mike McCollister] + +* Fixed profiling bug. The memory cycles incurred fetching the + opcodes were not being counted. + +* Fixed profiling bug. Poser performs a lot of processing when + system functions are called. Some of this processing would access + emulated memory, causing the cycles to do so to be counted against + the running application. This was incorrect. Poser's operations + should as transparent as possible and not show up on profiling data. + +* Added two HostControl functions: + + HostErr HostDbgSetDataBreak (UInt32 addr, UInt32 size) + + Configure Poser to enter an external debugger or display a + message if the bytes starting at the given address and + continuing for the given number of bytes are accessed in any + way (either written two or read from). The functionality + here is the same that is provided in the Data Breakpoint + section of the Breakpoints dialog. + + HostErr HostDbgClearDataBreak (void) + + Configure Poser to no longer enter an external debugger or + display a message when the memory range specified in + HostDbgDataBreak is accessed. + +* Added Gremlin Horde logging information: ROM version, ROM file + name, RAM size, device name; statistics regarding the number of + events each Gremlin was run for before generating an error; and + error frequency and type statistics. + +* Rearranged New Horde dialog, and added Select All / Deselect + capability for the Applications list, and a menu from which the + application to be launched first can be selected. + +* Changed behavior of application switching -- SysUIAppSwitch is + called on a random application from the list of applications + selected in the New Horde dialog, rather than having a random button + pressed. + +* Resuming a Horde run from a .psf file now terminates correctly, at + the maximum depth originally specified, rather than at the next + switching boundary, as before. + +* International Strict Checks (for checking multi-byte character + display routines) is now a debugging option. + +* Stepping a halted Gremlin now behaves identically when running a + single Gremlin or a Horde. + +* Files generated during Profiling now have unique names. + +* New warning displayed if comm port could not be opened on the host. + +* Added -pref command line option (-preference or -d can by used as + synonyms). This option changes preferences as stored in the + preference file. Its parameter has the form "key=value", and is + treated the same way as the "key=value" lines found in the + preference file. + +* Enabled the long-stillborn Logging Options for Warnings and Errors. + Checking these options will log the text of message dialogs just + before they are displayed. You can then use this text in bug + reports (or you can just use Ctrl-C or your platform's equivalent to + copy the text from the dialog to the clipboard, as mentioned in a + previous release note). + +* Added "ContinueOnWarnings" and "ExitOnErrors" preferences (along + with UI for them in the Debug Options dialog). If logging for + warnings is enabled and ContinueOnWarnings is true, warning dialogs + will be dismissed as if the user had pressed the Continue button. If + logging for errors is enabled and ExitOnErrors is true, fatal error + dialogs result in Poser exiting. + +* Added "SilentRunning" preference. Setting this value to non-zero + has the same effect as enabling the following separately controlled + preferences: LogErrorMessages, LogWarningMessages, + ContinueOnWarnings, and ExitOnErrors. + + Since it is not a good idea to set this option and forget it, Poser + resets this preference to zero every time it starts up. It resets + the value *before* parsing the command line options, so using the + -pref option to set it will work. + +* Added "DialogBeep" preference (along with UI for it in the Debug + Options dialog). Setting this value to non-zero causes Poser to + beep every 2 seconds that a message dialog is displayed. So as to + not annoy your co-workers if you're not around to hear it, Poser + will stop the beeping after 1 minute. + +* (Windows) If ExitOnErrors or SilentRunning is turned on, Poser + exits with a status code of 2 if a fatal error had occurred at any + time during execution, a status code of 1 if a warning had occurred + any time during execution, and a status code of 0 if no errors or + warnings occurred. + +* Changed the behavior of error handling when running a single + Gremlin vs. running a Horde. Originally, when there was only the + ability to run a single Gremlin, Poser would display all warnings + and errors as they occurred. Later, when Hordes was added, it was + felt that running multiple Gremlins was more of a "batch" operation, + and so the user should not be bothered with error messages. Instead, + if a Gremlin range was specified in the New Horde dialog, warnings + and errors were logged to a file, the Gremlin resulting in the + message was terminated, and Poser would switch to the next Gremlin. + But if the user specified to run only a single Gremlin in the New + Horde dialog, they'd get the original behavior of seeing error + dialogs as they occurred. Now, that behavior has been made + consistent with the original behavior: by default, the user will see + warnings and errors in dialogs as they occur. If this is not + desired, they can use the "ContinueOnWarnings" and "ExitOnErrors" + preferences to log the messages instead. + +* Gremlins used to implicitly log error and warning messages. Now + that there is a UI for specifying whether or not to log messages, + Gremlins no long automatically does that. To support the change, + Poser 3.3 will automatically turns on error and warning message + logging for Gremlins the first time you run it. + +* (Mac, Windows) When loading or saving preferences, Poser now first + looks for a preferences file in the same directory as itself. If it + finds that, it uses that as the preferences file. Otherwise, it + uses the old behavior of using the system's designated location for + preference files. + +* Profiling fix: when converting cycle counts into time, make use of + the actual CPU speed instead of assuming 16MHz. + +* (Windows) Fixed problem where a user could click on the Logging + Options of the New Gremlin dialog multiple times, bringing up + multiple Logging dialog boxes. + +* Indicate the active/inactive state of the Emulator's window by + lightening it if it's inactive. + +* (Mac) Fixed many problems with calling HostGetFile, HostPutFile, + etc. Calling these functions would crash, and even if they worked, + they wouldn't display any files, just folders. [Hal Mueller] + +* Check for screen access in the storage heap. The screen is not + normally stored in the storage heap, but the hardware supports it + and SuperWaba 2.0b3 puts it there. [Guilherme C. Hazan] + +* Fixed memory leak that could occur if an application running under + Gremlins attempted to call SysUIAppSwitch in order to launch another + application, that application took a command parameter block, and + that application was not on the list of applications that could be + run under Gremlins. The command parameter block was leaked. + +* Added two new UI-less preferences: LogFileSize and LogDefaultDir. + The former specifies the number of bytes that can be written to the + log file before old bytes are discarded. HostSetLogFileSize is + still supported, but calling HostSetPreference will now do the same + thing. LogDefaultDir specifies where you want log files stored. If + a Gremlin is running, log files will be stored in the Gremlin output + file, as before. But you can use LogDefaultDir to specify a + directory for log files generated while not running Gremlins. If + this preference is not specified, log files are written to the + Emulator directory, as before. The existence of this preference and + the -pref command-line option makes the old never-implemented + -log_save_dir command-line option obsolete. + +======================================================================== + +The following is a list of Palm OS traps that are not supported on future +OSes. The list is broken into a number of different groups (which more or +less explains why the trap was not implemented). + +Documented 'System Use Only' Traps +---------------------------------- +AlmAlarmCallback +AlmCancelAll +AlmDisplayAlarm +AlmEnableNotification +AlmInit +AlmTimeChange +DmInit +EvtDequeueKeyEvent +EvtGetSysEvent +EvtInitialize +EvtSetKeyQueuePtr +EvtSetPenQueuePtr +EvtSysInit +ExgInit +FrmAddSpaceForObject +FtrInit +GrfFree +GrfInit +InsPtCheckBlink +InsPtInitialize +MemCardFormat +MemHandleFlags +MemHandleOwner +MemHandleResetLock +MemHeapFreeByOwnerID +MemHeapInit +MemInit +MemInitHeapTable +MemKernelInit +MemPtrFlags +MemPtrOwner +MemPtrResetLock +MemStoreInit +MemStoreSetInfo +PenClose +PenGetRawPen +PenOpen +PenRawToScreen +PenScreenToRaw +ScrCompressScanLine +ScrCopyRectangle +ScrDeCompressScanLine +ScrDrawChars +ScrDrawNotify +ScrLineRoutine +ScrRectangleRoutine +ScrScreenInfo +ScrSendUpdateArea +SlkProcessRPC +SlkSysPktDefaultResponse +SndInit +SysBatteryDialog +SysColdBoot +SysDoze +SysInit +SysLaunchConsole +SysNewOwnerID +SysReserved10Trap1 +SysReserved31Trap1 +SysSemaphoreSet +SysUILaunch +SysWantEvent +TimInit +UIInitialize +UIReset +WinAddWindow +WinRemoveWindow + +Undocumented 'System Use Only' or 'HAL Use Only' Traps +------------------------------------------------------ +These traps are routines in the HAL, documented in headers to be called by +Palm OS only, or I have spoken with the authors of those traps who +identified them as internal traps. + +AttnAllowClose +AttnDoEmergencySpecialEffects +AttnEffectOfEvent +AttnEnableNotification +AttnHandleEvent +AttnIndicatorAllow +AttnIndicatorAllowed +AttnIndicatorCheckBlink +AttnIndicatorGetBlinkPattern +AttnIndicatorSetBlinkPattern +AttnIndicatorTicksTillNextBlink +AttnInitialize +BltCopyRectangle +BltDrawChars +BltFindIndexes +BltGetPixel +BltLineRoutine +BltPaintPixel +BltPaintPixels +BltRectangleRoutine +BltRoundedRectangle +BltRoundedRectangleFill +DayHandleEvent +DbgControl +DbgSerDrvClose +DbgSerDrvControl +DbgSerDrvOpen +DbgSerDrvReadChar +DbgSerDrvStatus +DbgSerDrvWriteChar +FlashInit +FntPrvGetFontList +HwrBacklightV33 +HwrBattery +HwrBatteryLevel +HwrCalcDynamicHeapSize +HwrCursorV33 +HwrCustom +HwrDebuggerEnter +HwrDebuggerExit +HwrDebugSelect +HwrDisplayDoze +HwrDisplayDrawBootScreen +HwrDisplayInit +HwrDisplayPalette +HwrDisplaySleep +HwrDisplayWake +HwrDockSignals +HwrDockStatus +HwrDoze +HwrFlashWrite +HwrGetRAMMapping +HwrGetSilkscreenID +HwrIdentifyFeatures +HwrInterruptsInit +HwrIRQ1Handler +HwrIRQ2Handler +HwrIRQ3Handler +HwrIRQ4Handler +HwrIRQ5Handler +HwrIRQ6Handler +HwrLCDBaseAddrV33 +HwrLCDContrastV33 +HwrLCDGetDepthV33 +HwrModelInitStage2 +HwrModelInitStage3 +HwrModelSpecificInit +HwrNVPrefGet +HwrNVPrefSet +HwrPluggedIn +HwrPostDebugInit +HwrPreDebugInit +HwrResetNMI +HwrResetPWM +HwrSetCPUDutyCycle +HwrSetSystemClock +HwrSleep +HwrSoundOff +HwrSoundOn +HwrTimerInit +HwrWake +KeyBootKeys +KeyHandleInterrupt +KeyInit +MemHeapPtr +MemStoreSearch +OEMDispatch2 +PalmPrivate3 +ScrCompress +ScrDecompress +ScrGetColortable +ScrGetGrayPat +ScrPalette +ScrScreenInit +ScrScreenLock +ScrScreenUnlock +ScrUpdateScreenBitmap +SndInterruptSmfIrregardless +SndPlaySmfIrregardless +SndPlaySmfResourceIrregardless +SysFatalAlertInit +SysKernelClockTick +SysNotifyBroadcastFromInterrupt +SysNotifyInit +SysReserved30Trap1 +SysReserved30Trap2 +SysUnimplemented +TimGetAlarm +TimSetAlarm +UIColorInit +WinGetFirstWindow +WinMoveWindowAddr +WinPrvInitCanvas +WinScreenInit + +Kernel Traps +------------ +These traps are not implemented because 68K applications do not have access +to the kernel APIs. + +SysEvGroupCreate +SysEvGroupRead +SysEvGroupSignal +SysEvGroupWait +SysKernelInfo +SysMailboxCreate +SysMailboxDelete +SysMailboxFlush +SysMailboxSend +SysMailboxWait +SysResSemaphoreCreate +SysResSemaphoreDelete +SysResSemaphoreRelease +SysResSemaphoreReserve +SysSemaphoreCreate +SysSemaphoreDelete +SysSemaphoreSignal +SysSemaphoreWait +SysTaskCreate +SysTaskDelete +SysTaskID +SysTaskResume +SysTaskSetTermProc +SysTaskSuspend +SysTaskSwitching +SysTaskTrigger +SysTaskUserInfoPtr +SysTaskWait +SysTaskWaitClr +SysTaskWake +SysTimerCreate +SysTimerDelete +SysTimerRead +SysTimerWrite +SysTranslateKernelErr + +Obsolete Traps +-------------- +These traps are not implemented because they are obsolete Palm OS 1.0 traps +(or an esoteric obsolete trap such as WiCmdV32). + +FplAdd +FplAToF +FplBase10Info +FplDiv +FplFloatToLong +FplFloatToULong +FplFToA +FplLongToFloat +FplMul +FplSub +WiCmdV32 + +Ghost Traps +----------- +These traps were never implemented in Palm OS (although they appear in +CoreTraps.h), but they are listed for completeness. + +ClipboardCheckIfItemExist +CtlValidatePointer +FrmSetCategoryTrigger +FrmSetLabel +MenuEraseMenu +SysUICleanup +WinDrawArc +WinDrawPolygon +WinEraseArc +WinErasePolygon +WinFillArc +WinFillPolygon +WinInvertArc +WinInvertPolygon +WinPaintArc +WinPaintPolygon + +Unimplemented NOP Traps +----------------------- +These traps should not be called by applications. Some third-party +applications call these traps and it is safer to treat them as NOPs for +backwards compatibility. + +FplFree +FplInit +HwrTimerSleep +HwrTimerWake +PenSleep +PenWake +SerReceiveISP +SrmSleep +SrmWake +SysDisableInts +SysRestoreStatus +TimHandleInterrupt +TimSleep +TimWake +WinDisableWindow +WinEnableWindow +WinInitializeWindow + +Unimplemented Rare Traps +------------------------ +These traps all seem like traps that are only used internally by Palm OS or +by serial drivers or by OEM extensions, etc. In other words, these are +traps that an application would not use. + +ConGetS +ConPutS +DayDrawDays +DayDrawDaySelector +DbgCommSettings +DbgGetMessage +DlkControl +DlkDispatchRequest +DlkStartServer +DmMoveOpenDBContext +DmOpenDBWithLocale +FlashCompress +FlashErase +FlashProgram +IntlGetRoutineAddress +MemGetRomNVParams +MemNVParams +OEMDispatch +ResLoadForm +SerPrimeWakeupHandler +SerReceiveWindowClose +SerReceiveWindowOpen +SerSetWakeupHandler +SlkSetSocketListener +SrmOpenBackground +SrmPrimeWakeupHandler +SrmReceiveWindowClose +SrmReceiveWindowOpen +SrmSetWakeupHandler +SysNotifyBroadcast +SysNotifyBroadcastDeferred +SysNotifyDatabaseAdded +SysNotifyDatabaseRemoved +SysSetTrapAddress + + +Changes for 3.2 (2001-06-03) +---------------------------- +* Interim internal release dates: + 3.2a1 - 2001-03-30 + 3.2b1 - 2001-05-06 + 3.2b2 - 2001-05-14 + 3.2b3 - 2001-05-29 + +* (Unix) Support psf, ram, rom, device, load_apps, and run_app + command line options. [David A. Jablonski] + +* Rewrote LCD-handling code to share a lot of cross-platform code. + The major user visible effect of this is that the Unix version now + has the white 2-pixel border around it when emulating a device with + an SED 1375 or 1376 display, and that the updating on Unix will be + faster (especially over a network). + +* Rewrote a lot of the EmDevice routines in order to be more table- + driven. Also added ability to configure the CPU object created, and + the minimum RAM size that can be configured. + +* Added Visor Edge support. [James Phillips] + +* Rewrote the menu-handling code to share a lot of cross-platform + code. Along the way, cleaned up some host-specific aspects of menu + handling. Over all: + + * Mac + + o Now has a popup menu that looks like the Windows version + (use Ctrl-click to display it). + + * Unix + + o The popup menu on Unix now is laid out the same way as the + Windows version. This includes finally having the MRU menus + for recent sessions and installable files. + + o Can press Shift-F10 to display the popup menu. + + * Windows + + o Menu items now have Alt shortcut keys. I would have used + the more-standard Ctrl, but that's currently used for + entering commands into the emulated environment. I would + have used the less-standard Ctrl+Shift, but felt that + requiring three fingers for a shortcut command was + excessive. + + o The menu is popped-up in response to a WM_CONTEXTMENU + message now instead of manually looking for F10 presses and + right button clicks. This means that (a) the menu is popped + up at the *end* of a right-button click instead of the + beginning, (b) you need to use Shift-F10 instead of just F10 + to popup the menu item, and (c) you can also use the "menu" + key on some PC keyboards (the "VK_APPS" key). + + * All + + o Paves the way for dynamically updating menus for different + circumstances (for instance, if emulating a particular + device requires a menu special for it, that can be added). + + o Hmmm...HostAddMenuCommand, anyone? :-) + +* Sped up the checking for direct access to UI Mgr data structures. + The overhead for this option should now be imperceptible. + +* Allow read/write access to font fields in ControlType, ListType, + and FormLabelType. [Many] + +* Allow read access to FormType::menuRscId field. [Markus Schmid] + +* Allow complete access to gadgets (since gadget callback functions + are given just a pointer to the gadget, but not the Form through + which they could make access calls). [Ben Combee] + +* Allow read/write access to "attr" for FormBitmapType before Palm OS + 3.2 -- FrmHideObject didn't change the usable bit before then. + [Steve Achelis] + +* Fix access to WindowType::frame field. This was allowed, but a bug + in the calculation of the field's offset invalidated the access. + [Stephen Best] + +* For Poser 3.1, access to WindowType fields displayWidthV20, + displayHeightV20, displayAddrV20, and bitmapP was documented as + "read only". This is now enforced; write access is no longer + allowed. + +* For Poser 3.1, access to the FieldType field attr was documented as + "read/write" before Palm OS 3.3. This is now enforced. + +* Allow access to WindowType fields even when the WindowType is part + of a FormType. It used to be that you could not access those fields + if the windowFlags.dialog bit was set. + +* Fixed bug where Poser itself would cause an access violation to + parts of a FormType when preparing the error message for a user + access violation to the FormType. + +* Poser used to read and cache the size of the system function + dispatch table. However, some versions of Palm OS now resize the + table, thus invalidating Poser's cached size value. The result is + that Poser would sometimes report that system functions are not + implemented when they really are. [Mike McCollister] + +* Squelch display of message saying that someone called DbgMessage + ("c") and DbgMessage ("Transaction finished"). [Catherine White, + Andreas Linke, Mark Peters] + +* (Mac) Carbonized. [Scott Gruby] + +* Be more robust in HostControl calls that take printf-style var-args + parameters. + +* Fix potential bug in code that tries to find the beginning of a + function given an address in that function. [Adam Liss] + +* Support Soft, Hard, Debug, and No Extension resets. The Reset menu + item now brings up a dialog allowing you to set various + reset-related options. The "Reset" button in the "Continue / Debug + / Reset" dialog is now "Reset...", and brings up the same dialog. By + default, the settings are set to a Soft Reset with Extensions. + +* Fixed problem where device could get into a "flashing" state while + running Gremlins, where the device is continually turning on and + off. [Stephen Best] + +* Added 4 more slots in Card Options dialog. + +* If the user brings up the Card Options dialog, Poser checks for the + existance of the HostFS shared library when exitting the dialog. If + the library is not installed, Poser displays a message dialog + suggesting that the user download and install it. + +* Make sure the user can't accidentally attempt to install a HotSync + User Name from the preferences dialog that's too long. [Steve + Achelis] + +* (Unix) Extended "Choose File" dialog to support the choosing of + directories. This "Choose Directory" dialog is used when clicking + on the "Browse" button in the "Card Options" dialog. Navigate via + the file/directory name list, or type the path into the edit box. + You can use TAB for name completion, '/' to indicate that you want + to enter the directory currently entered in the edit box, and RETURN + (or click on the OK button) to select the directory in the edit box. + +* (Unix) Implemented clipboard support. This support has uses in two + areas: copying the text from error message boxes (see the next + item), and clipboard interchange. Clipboard interchange is where + the Palm OS clipboard is kept in sync with the host clipboard. On + Unix, this is tricky because of the paradigm Unix uses for the + clipboard. But, in short, to copy from the Palm OS to a Unix + application, select the text in the Palm OS application, select the + Copy menu item in the Palm OS application, go to the Unix + application, and middle-click to paste the selection. To copy from + a Unix application to a Palm OS application, select the text in the + Unix application, go to the Palm OS application, set the insertion + point, and select the Paste menu item. + +* (Unix) The error dialog that reports runtime errors in Palm OS + applications (e.g., "Bus error", "Low-memory accessed", etc.) now + displays the text in a selectable pane. That is, the user can + select the text with the mouse. Once this is done, it acts like a + selection in any other Unix program, and can be pasted by + middle-clicking in the target Unix application. + +* (Unix) All dialogs are now centered on the main screen. + +* Show applications in the "New Gremlin" dialog even if they have the + dmHdrAttrHidden bit set. [Scott Johnson] + +* Fixed problem with profiling where any system function that Poser + completely implemented (including all HostControl functions) would + cause the profiling system to push a record onto an internal stack + but not pop it off later, leading to an internal stack overflow. + +* Using a debugger to single-step over a line of source code that + performed a "soft" invalid memory access (that is, one that is + proscribed by convention, and not, say, one that causes an address + error) would queue up the error and not show it until regular + execution was resumed. [Adam Dingle] + +* Support -horde_save_dir. This option has been around for a couple + of years, but never did anything. It now works as documented. Use + it to specify the location for "GremlinStates_*" directories. This + parent directory must already exist. If the directory does not + exist or is not specified, the "GremlinStates_*" directories will be + created in the Emulator directory as before. + +* When resetting a session or creating a new one, reset the Gremlin + state so that the Suspend and Resume menu items are no longer + enabled. + + +Changes for 3.1 (2001-03-16) +---------------------------- +* Interim internal release dates: + 3.0a9e1 - 2001-01-07 + 3.0a9e2 - 2001-01-09 + 3.0a9e3 - 2001-01-17 + 3.0a9e4 - 2001-01-23 + 3.0a9e5 - 2001-01-24 + 3.0a9e6 - 2001-02-07 + 3.0a9e7 - 2001-02-19 + 3.1b1 - 2001-02-22 + 3.1b2 - 2001-02-27 + 3.1b3 - 2001-02-28 + 3.1b4 - 2001-03-02 + 3.1b5 - 2001-03-08 + 3.1b6 - 2001-03-08 + 3.1b7 - 2001-03-14 + 3.1b8 - 2001-03-15 + +* Changed Skin file searching rules. Now, when starting up, Poser + looks for a directory called "Skins". On Mac and Windows, it looks + for this directory in the same directory as Poser itself. On Unix, + it looks in $POSER_DIR, $HOME, /usr/local/share/pose, and + /usr/share/pose, stopping at the first one that has a directory + named "Skins" or "skins". Once a Skins directory has been found, + that directory is recursively searched for *.skin files. + + Because the rule change may confuse users, Poser displays a warning + message on startup if it can't find a "Skins" directory. This + warning is displayed only once, so as to not disturb developers + who don't care a whole lot about skins. + +* If the Skins directory could not be found, display an error message + at startup. This will tell users that they either need to rename + their skins directory to "Skins", or to download the skins archive + from the Poser Web page. + +* Allow the setting of breakpoints in the prologue code of Palm OS + Manager's that are sub-dispatched. That is, the managers that take a + selector number and then use a secondary dispatch table to further + dispatch to the final function. Poser would originally skip over + this prologue code and jump directly to the final function + destination. However, one could not set breakpoints on the prologue + code and have them trigger in that case. Now if any breakpoint is + installed, Poser jumps to the prologue code. Otherwise, it jumps to + the final function address like it used to. This modification allows + people to use the 's' command in PalmDebugger to Step into Palm OS + functions that are sub-dispatched. + +* (Mac) Updated to CodeWarrior Pro 6. + +* (Mac) Updated to GUSI 2.13 (needed under CWP6). + +* (Mac) Worked around problem in PowerPlant 2.1 that caused the + highlighting to not always work in text lists in dialogs like the + New Gremlin dialog. + +* Recalibrated the Palm OS tick-counter to my 500MHz PC. The tick + counter now runs 3 times slower than before, resulting in 97 ticks + per second as opposed to the 297 ticks per second I was seeing + before. The upshot of all this is that repeating tasks (like + scrolling and holding down the hard buttons) don't zoom by as + quickly as before. + +* Cleaned up the handling of Poser-detected errors and their + messages. Before now, if you got an error message for a "soft" error + (that is, one that is not a hardware exception), Poser would display + a dialog box containing Continue, Debug, and Reset buttons. If you + clicked on Debug and there were no debugger, it would be the same as + clicking on Continue. Now, Poser will merely redisplay the same + dialog until you click on a different button or a debugger can be + found. + +* Switched to native "long long" operations in Profiling.cpp (this + issue was finally forced because someone forgot S64Compare in CWP6). + +* Adjusted the calculated heights for cells in LTextColumnView in + order to account for the 2 pixel inset LTextColumnView::DrawCell + uses. Ken noticed that descenders were getting chopped off. + +* Fixed problem in Hordes where specifying a switch depth but not + specifying a maximum depth (that is, not checking the third check + box in the dialog) would cause the Hordes mechanism to not actually + switch between different Gremlin numbers. + +* Implemented support for the timeout values passed to NetLibReceive + and NetLibSend. Previously, these values were ignored, leading to + hangs or overly-long timeouts on the desktop that wouldn't appear on + the device. [Hiroyuki Okamoto] + +* Fixed problems where entering a debugger could cause Poser to + complain that the PC is being set to an invalid value (mostly seen + when executing "att" in PalmDebugger). Fixing this problem also had + the benefit of speeding up emulation by 6%. + +* Would you believe that changing the following in the core emulation + loop from: + + uint16 opcode; + opcode = get_iword (0); + fCycleCount += (cpufunctbl[opcode]) (opcode); + + to: + + uint32 opcode; + opcode = get_iword (0); + fCycleCount += (cpufunctbl[opcode]) (opcode); + + sped up emulation by 4%? + +* Poser was relying on a lot of UAE types and routines for basic + facilities. For instance, Poser had standardized on uae_u8, uae_u16, + etc., for basic integral types, and get_byte, get_word, put_byte, + etc., for basic memory emulation. However, all of those are + UAE-specific. When implementing ARM support, those facilities may + not be available. Therefore, move those basic types and facilities + into Poser, give them Poser-ish names, and recast UAE to use those + genericized facilities. + +* When the SED1376 LCD is turned off, emulate the fact that the bus + to it is disabled. While disabled, any access to the SED registers + or VRAM will cause a bus error. + +* Add support for the interrupts caused by the additional sources on + the DragonBall VZ (UART2, TMR2, PWM2, etc.), and support the + configurable interrupt levels for those sources. + +* Keep the Palm OS clipbard in sync with the host platform's + clipboard. After a Palm OS application calls ClipboardAddItem or + ClipboardAppendItem, the Palm OS clipboard is copied to the host + clipboard. Before calls to ClipboardGetItem, the host clipboard is + copied to the Palm OS clipboard. Note that this synchronization is + not performed if a Gremlin is running so that any data on the host + clipboard doesn't alter the Gremlin outcome. + + With this change, it should be fairly painless to exchange data + between the emulated Palm device and the host computer. To copy data + into the emulated device: + + * Copy the text data with Ctrl-C (or as appropriate on Mac or Unix) + * Switch to the emulated device + * Make sure you have a field active that can accept text data + * Press Ctrl-C, then P. Ctrl-C enters the "/" stroke to invoke + the "Command" mode, and "P" invokes the Paste command. + + To copy data from the emulated device to the host: + + * Select the text on the emulated device + * Press Ctrl-C, then C to copy the data. + * Switch to the host computer application to receive the text + * Press Ctrl-V (or as appropriate on Mac or Unix). + + Note that data copied to the Palm's clipboard is silently truncated + to cbdMaxTextLength characters if necessary. + +* Fixed problem where some stack overflows weren't being detected. On + a LINK instruction, when the stack pointer is decremented to hold + the old A6 value, we check the stack. However, when the stack is + decremented again by the value specified by the LINK statement, that + wasn't being checked. + +* Completely rewrote the error messages generated when an emulated + application causes (either directly or indirectly) an error. This + includes both hardware exceptions (bus error, address error, divide + by zero, etc.) and emulator-detected errors (write to low-memory, + write to screen buffer, stack overflow, etc.). The new messages are + intended to be more useful (more detailed information) and clearer + (more explanatory text). + +* Added new error message to explain cases where it looks like an + invalid DrawWindow is being used. On Debug 3.5 ROMs, when there is + no valid DrawWindow, the Palm OS sets the value of the stored + DrawWindow to 0x80000000. This value causes a bus error. Poser + detects this kind of bus error and puts up a message saying what it + really thinks is going on. + +* Added new error message saying that the application is attempting + to write to the storage heap. Previously, the user would just see a + "bus error" message. + +* Previously when reporting a hardware exception, Poser would attempt + to contact a debugger before displaying an error message. Now Poser + displays an error message first. This mirrors the way other error + messages are handled. The exceptions to this rule are with Trace, + TRAP 0, and TRAP 8 exceptions. Those will still attempt to silently + enter the debugger first. If no debugger is connected, *then* an + error dialog is posted. + +* Poser used to report certain errors only once per application run. + The intention was to not pelt users constantly when running an + application that, say, draws directly to the screen. In an effort to + get more applications to be more compliant, this one-time-only + feature has been removed. If you need to turn off those error + messages, you can still use the Debug Options dialog. + +* After the previously-mentioned changed, an "it's always been there" + bug cropped up. After reporting a warning like "Application just + read from low-memory", the developer could click on the Debug button + and break into an external debugger. From the debugger, they could + examine the error, and then optionally continue the application's + execution. However, doing so would re-execute the instruction that + caused the error. We never saw this before because of Poser's + feature of reporting such errors only once per application run. But + with that feature removed, the application keeps breaking at the + same place. Even with the feature in place, there could be problems + if the instruction were some sort of pre/post-increment/decrement + instruction. The first time it was executed, the affected base + register would get modified. And it would get modified again the + second time it was executed, even if no error were reported. Anyway, + that's all fixed now. Now Poser waits for the instruction to + completely execute before reporting an error so that the PC is + properly incremented and the instruction doesn't get executed twice. + The only negative side effect of this change is that the PC will now + always point to the instruction *after* the one causing the error. + Most of the time, this will be confusing only if you're debugging at + the assembly level instead of the source level. However, if the + opcode executed was last opcode of a source-level statement, the + source line indicated by the debugger could be the one *after* + causing the error. + +* The last part of that last paragraph bears repeating: errors are + now flagged *after* the instruction causing it has finished, rather + than in the middle of the instruction. This means that the PC + reported to the debugger will be pointing to the *next* opcode. You + may need to mentally adjust for this difference in the debugger. + That is, you may need to look at the previous instruction or source + code line. + +* Poser keeps a list of Palm OS function names and error code names. + Updated this list for Palm OS 4.0. + +* Fixed some problems resuming a Gremlin from a saved file when no + upper event bound has been selected. [Catherine White, + Llamagraphics, Inc.] + +* (Windows) Work around the fact that connect may return WSAEINVAL or + WSAEWOULDBLOCK when it really means WSAEALREADY. [Mark Baysinger] + +* (Windows) Provide a default extension when asking to save a file. + [Mike McCollister] + +* (Windows) Fixed color problems when saving the LCD to a disk file + when it's in 16-bit mode. [Mike McCollister] + +* Added new command line option: -horde_quit_when_done. Specifying + this option on the command line will cause the emulator to exit + after completing a Horde. + +* Fixed problem with the Step Spy feature in PalmDebugger where + attempting to set a Step Spy address would cause Poser to raise an + invalid access error message. + +* Additional documentation: HostProfileInit takes two parameters: + maxCalls and maxDepth. These parameters determine the sizes of + arrays used to keep track of function calls and call depth. A + typical value for maxCalls is 65536, and for maxDepth is 200. In + future versions of Poser, the need for specifying these values may + be removed. + +* (Mac) Fixed application list in the New Horde dialog. There used to + be a feature whereby application names would be shown in Japanese if + running a Japanese ROM on a JLK-enabled Mac. Somewhere along the + way, this got broken. It should be fixed now. + +* (Mac) Messages strings used to be stored in a 'STRA' (string array) + resource. However, if an error occurred while handling a packet from + a debugger, Poser would be unable to access this resource when + forming an error message. This is because Poser would be operating + in the context of the debugger. Thus, the debugger's resources would + be available, but not Poser's. The result of this would be error + messages with the words "missing string #xxxx" in them. Now, the + strings are embedded in the application as string constants, the + same way as is done on Unix. + +* (Mac) Some messages would display missing character symbols (those + hollow boxes) instead of performing a linefeed/carriage return. + Fixed. + +* Corrected the spelling in some messages (ran the whole lot through + a spell checker, I did...). + +* Poser makes calls into ROM functions from time to time in order to + get information or perform some operation. Poser has known for a + long time to skip breakpoints in those functions when they're + executed in this fashion. Now Poser also skips DbgBreaks (TRAP 8s) + and Trap Breaks (from PalmDebugger's ATB command) as well. + +* (Mac) Translate high-ASCII characters when exchanging the Mac + clipboard with the Palm OS clipboard. + +* (Mac) Fixed problem where certain high-ASCII characters (CENT SIGN, + POUND SIGN, COPYRIGHT SIGN, PLUS-MINUS-SIGN, and MICRO SIGN) weren't + getting translated correctly into the PalmLatin code page. + +* Added checks for accesses to form, form object, and window data + structures from applications. In general, all access is prohibited. + The following exceptions are allowed: + + ======================= =========== ========================== + struct/field access type When direct access allowed + ======================= =========== ========================== + + WindowType + displayWidthV20 read only before Palm OS 2.0 + displayHeightV20 read only before Palm OS 2.0 + displayAddrV20 read only before Palm OS 3.5 + bitmapP read only before Palm OS 3.5 + frameType read/write always + + FormType + handler read only always + helpRscID read/write always + defaultButton read/write always + + FieldType + lines read only if AccessorDispatch not present + attr read/write before Palm OS 3.3 + + ControlType + attr read only if AccessorDispatch not present + style read only if AccessorDispatch not present + + ListType + attr read/write always + topItem read only before Palm OS 4.0 + + TableType + numRows read only before Palm OS 4.0 + numColumns read only before Palm OS 4.0 + topRow read only before Palm OS 4.0 + rowAttrs read only always + columnAttrs read only always + items real only always + attr read/write always + currentRow read/write before Palm OS 4.0 + currentColumn read/write before Palm OS 4.0 + + FormBitmapType + attr read only if AccessorDispatch not present + + FormLabelType + attr read only if AccessorDispatch not present + + FormGadgetType + attr read only if AccessorDispatch not present + attr read/write before Palm OS 3.5 + + ScrollBarType + attr read only if AccessorDispatch not present + attr read/write before Palm OS 3.5 + + WARNING: use of this option may dramatically slow down your + application's performance. You may want to make use of this + feature on a limited basis until the next relesae of Poser, + which will speed things back up again. + +* Added check for accesses to the unused portion of the stack. + +* Removed unused checkboxes from Debug Options dialog, and added or + enabled checkboxes for the new features. + +* Calling DbgMessage when no debugger was around to receive the + message could crash Poser. Now, if no debugger is attached, the + message is displayed in a dialog box. + +* When presented with an error dialog box, you can press Cmd-C (Mac), + Alt-C (Unix), or Ctrl-C (Windows) to copy the error message to the + clipboard. Note that on Unix, the cursor needs to be over the error + dialog box in order for the keystroke to be sent to the dialog box. + +* Rewrote the Breakpoints dialog as a cross-platform dialog, thus + making it available on Mac and Unix as well. + +* When a StepSpy condition (as established by PalmDebugger or any + other debugger using the relevent fields of the Continue debugger + packet) is triggered, or a Watchpoint condition (as established by + the Breakpoints dialog) is triggered, display a dialog box + describing what just happened, much like what happens on other + memory access error dialogs. + +* In checking the stack pointer against the low end of the stack or + when checking for memory accesses between the low end of the stack + and the stack pointer, Poser needs to know where the low end of the + stack is. Previously, it would just assume that the entire Memory + Manager chunk containing the stack pointer was used for the stack + and so the start of the chunk was the low end of the the stack. This + assumption was incorrect for some applications (particularly + background applications in the Palm OS) that would allocate a memory + block for use as "instance data" that also included an embedded + array for use as a private stack. In order to account for those + applications, Poser now also monitors calls to SysTaskCreate, which + is passed a stack starting address and size as parameters. + +* (Unix) Mapped ESCAPE to most dialog Cancel buttons. + +* (Unix) Made clicking on the dialog's Close box in the title bar the + same as pressing ESCAPE. If a button with an ESCAPE shortcut could + not be found, then pretend the user clicked on the Cancel button. + +* Re-implemented the Export Database dialog as a cross-platform + dialog. Added code to check for .pqa databases and tack on ".pqa" + instead of ".pdb" when forming the default filename. + +* (Mac) Poser implements the LEventDispatcher::UpdateMenus method to + update the session and database MRU sub-menus. However, this method + is called all the time, and since building those menus can be time + consuming, UI responsiveness is impacted. Now Poser just rebuilds + those menus when the MRU lists actually change. The drawback to this + approach is that the sub-menus could be incorrect if the files they + correspond to are deleted from the file system. + +* Extended -horde_apps command line parameter to take an "exclusion + modifier". If the list of application names is preceded with a dash + (e.g., "-Prefs,HotSync"), then all applications are available to + Gremlins *except* those applications. + +* Loading a session file used to involved installing the HotSync User + Name that's specified in the Properties/Preferences dialog. That + direction is now reversed. When a session is loaded, the HotSync + User Name is extracted from the session and installed as the + emulator preference. This allows you to specify different users in + saved sessions and have those restored when you reload those + session, as opposed to all sessions -- new and reloaded -- having + the same user name. [Scott Maxwell] + +* Fixed long-standing bug where reloading session files created on + previous days did not get their system date updated. The time would + be correct, but the date would the the date on which the session was + created (or whatever was established by the last use of the Date + preference panel). [Scott Johnson, Paul Nevai] + +* Better hard key emulation. On an actual device, pressing a key on a + sleeping device would trigger an edge-sensitive INT[3:0] interrupt. + Normally, this by itself won't wake up a device. However, a KB + interrupt can also be generated, and this interrupt will wake up a + device. Poser, on the other hand, ignored the fact that + edge-sensitve INT[3:0] interrupts weren't supposed to wake the + device, and it also failed to support the KB interrupt. Thus, on a + device, pressing a key to wake up the device would succeed because + of the KB interrupt, while on Poser it would succeed because of + Poser's incorrectly waking the device on an edge-sensitive INT[3:0] + interrupt. In Palm OS 4.0, INT[3:0] interrupts are actually maked + off when the device is asleep, and so pressing keys to wake the + device would utterly fail. Poser now supports the KB interrupt, and + devices wake up again under Palm OS 4.0. + +* Added serial port -> TCP socket mapping. You can now redirect + emulated serial communications to a socket connected to another + application running on the same or different host computer. On Mac + and Windows, in the Properties/Preferences dialog, select the TCP + menu item. This will enable the Target edit text item, wherein you + can enter an IP address:port (e.g. localhost:7777). On Unix, there + is no menu item for selecting a serial port; there's just an edit + text item. Normally, you'd have something like /dev/ttyS0 there. But + you can replace this with an IP-looking address (e.g., + localhost:7777), and Poser will recognize the difference and act + accordingly. + + When opening the emulated Palm serial port, Poser will open a + corresponding socket. It will first try to connect to another socket + at the given address. If that fails, it will revert to "server" + mode, and listen for connections on the given port. + +* Re-implemented the Preferences/Properties and Tracer Options + dialogs as cross-platform dialogs. + +* Added HostSessionSave. + + HostBoolType HostSessionSave(const char* saveFileName); + + The session will be saved to a file with the given name. Regardless + of whether or not the save attempt succeeds, the function returns + false. When the session file is reloaded, execution resumes at the + point where HostSessionSave is returning. In this case, the function + returns true. This can be handy if have debugging code that can + detect an invalid condition, and you want your debugging harness to + save a session file for a later post-mortem. When you reload that + snapshot later, you can break into a debugger. For example: + + void MyFunc (void) + { + // Check to see if our application's data is internally + // consistant. If not, save the state for later analysis. + + if (ASSERT_VALID () == false) + if (HostSessionSave ("c:\\temp\foo.psf")) + DbgBreak (); + } + +* Changed the type of the second parameter to HostTraceOutputB from + "const unsigned char*" to "const void*". [Ben Combee] + +* When a Gremlin is running and -- for whatever reason -- the device + goes to sleep, wake it up by pretending the user pressed the Power + button. + +* Give the Gremlin fake event generation mechanism a 1% chance of + generating a vchrAutoOff event. This is the same chance given to it + generating a vchrKeyboard event. [Mike McCollister] + +* Added facilities for resolving aliases (Mac), links (Unix), and + shortcuts (Windows). + +* Added profiling support for BSR opcodes. [B. CAMERON LESIUK] + +* (Windows) Provided better error message when trying to create bound + emulators on Windows 95, 98, and ME. [Gregory Allen Gaub] + +* Added support for system extensions that reside in RAM. Normally, + Poser treats code executing in RAM as "application" code, and + prohibits it from accessing areas of memory reserved for the + operating system. However, this approach prevented user-installed OS + components that reside in RAM (such as OS patches and updates). + Poser now recognizes those components and allows them access to + memory in the same way it allow the OS in ROM to access memory. + Components that Poser recognizes are system patches, system + extensions, and libraries with Palm creator IDs. + +* Updated copyright messages to include 2001. + +* Updated ROM Transfer to print slightly better messages on errors. + For instance, instead of displaying #773, it will display "timeout". + Similarly for all other serial manager error codes. + +* Updated ROM Transfer to use the Serial Manager instead of the + Serial Driver Library when available. Will also use Palm OS 4.0 + SrmExtOpen call if available. + +* Fixed problem where Poser could read off the end of the ROM image + when trying to determine what type of device it's for (when building + the Device menu in the New Session dialog). [John Ludwig] + +* (Unix) Set the default device in the ROM Transfer dialog to + "/dev/ttyS0" in order to impart to users what type of data should be + entered here. Because different Unixes have different device names + for their serial ports, the default may not be correct. But it + should get the idea across, preventing users from entering just "0", + for example. [Bob Marcum] + +* Added Prism and Platinum support. [James Phillips, Handspring] + +* Updated Profiling operation rules. + + When using the menu commands, the following rules are used: + + * System starts with only Start enabled. + + * Selecting Start starts profiling executed code, initializing + the profiling system first if necessary. After selecting Start, + Stop and Dump are enabled. + + * Selecting Stop suspends the profiling of executed code. After + selecting Stop, the Start and Dump menu items are enabled. + + * The user can select Start and Stop as many times has he wants. + Always, the other menu item will end up being enabled, as well + as Dump. + + * Selecting Dump first Stops any profiling (if necessary) and then + writes data collected while profiling to files on disk. After + selecting Dump, only the Start menu item is enabled. + + When using the HostControl calls, an analogous set of calls can take + place. The only difference is that HostProfileInit can be called + before the first call to HostProfileStart or after HostProfileDump + in order to specify any custom parameters. If any HostProfile* calls + are made out of sequence, the error code hostErrProfilingNotReady is + returned. [Michael Nordstrom] + +* Updated HostProfile* functions along the same lines. If a + HostProfile* call is made out of sequence, it will return + hostErrProfilingNotReady. + +* Enable/disable Gremlins menu items correctly. + +* (Windows) Added platform-specific support for HostSaveScreen. [Bill + Kirby] + +* (Windows) Added multiple monitor support. Mostly this means that + the device window won't always reposition itself on the primary + monitor. [Thomas Hagen Johansen] + +* (Unix) Added $X_CFLAGS to espws build flags. [John Ludwig] + +* (Unix) Removed -L/usr/lib from link path (leaving just + /usr/local/lib). Both of these were added on Jan. 8, 2000, + apparently in response to Ralf Zimmerman's comments on + emulator-forum ("Re: Problem while compiling POSE 3.0a3 on Linux", + posted Dec 28, 1999). However, adding /usr/lib may have been + overkill, since doing that hides any custom tools in /usr/local/lib. + [John Ludwig] + +* When checking the validity of databases before installing them, now + also check the database's creation and modification dates. Poser + doesn't care about these and neither does the Palm OS, but some + versions of HotSync complain if the creation date is more recent + than the modification date or if the creation date is zero, so + display a warning if either of those cases is true. + +* In 3.0a8, code was added to automatically change use of + 207.240.80.136 (the old proxy address) to 209.247.202.106 (the new + proxy address). Well, those addresses are changing again. Instead of + hardcoding the address this time, Poser now looks up the address, + using the name "content-dev.palm.net" (or "content-dev2.palm.net" if + that one's not available). + +* Made the ROM transfer process more robust. Modifying the ROM + Transfer application and the Emulator to randomly corrupt data and + drop characters at a higher-than-normal rate showed problems with + the transfer process's ability to recover from transmission errors. + Those should all be fixed now. + +* With NetLib Redirection on, recv() is called as the underlying + implementation of NetLibReceive. If recv() returns EGAIN, map it to + netErrWouldBlock. [Chad House] + +* A bug in an internal ROM function in Palm OS 3.5 and 4.0 causes the + message "Background must be at least half as wide as slider." to be + displayed under the opposite conditions that it should be. + +* Plugged a hole that could cause Poser to hang. Occassionally, + Poser needs to suspend emulation so that it can make it's own + calls to Palm OS functions (it does this, for example, when building + the list of applications that appears in the New Gremlins window). + Because suspending emulation between any two opcodes and inserting + a call to a Palm OS function can be disruptive (for instance, the + Palm OS function may change the state of the heap in a way that + would never happen on a real device), Poser tries to first halt + emulation at a safe stopping point. This stopping point use to be + at the next call to a Palm OS function. However, even that's not + safe enough. If, for example, the Memory Manager semaphore were + acquired when emulation was suspended, and the call Poser was making + tried to acquire the semaphore, then Poser's call could block, waiting + for the semaphore to be released. Because emulation is suspended, + that will never happen, and Poser hangs. So now, in addition to + suspending emulation on a system call, Poser also makes sure that + the Memory Manager semaphore is available. This change should fix + a number of mysterious Poser hangs, including some that occur when + downloading a file for debugging in CodeWarrior. + + +Changes for 3.0a8 (2000-11-17) +------------------------------ +* Interim internal release dates: + 3.0a8e1 - not released + 3.0a8e2 - 2000-09-05 + 3.0a8e3 - 2000-09-13 + 3.0a8e4 - 2000-09-14 + 3.0a8e5 - not released + 3.0a8e6 - not released + 3.0a8e7 - 2000-10-13 + 3.0a8e8 - 2000-10-19 + 3.0a8e9 - not released + 3.0a8e10 - 2000-11-06 + 3.0a8e11 - 2000-11-13 + 3.0a8e12 - 2000-11-16 + 3.0a8e13 - not released + 3.0a8e14 - 2000-11-17 + 3.0a8e15 - 2000-11-20 + 3.0a8e16 - 2000-11-26 + +* Added Dragonball VZ support. + +* Added SED1376 support. + +* Fixed (again) the problem with the Palm IIIc screen not getting + redrawn after turning the power off then on. + +* Palm devices since the Palm III have an A-to-D converter (ADC) + called the Burr-Brown ADS7843. Until now, Poser did no emulate this + hardware, and so patched the OS routines that tried accessing it, + causing them to return sensible values anyway. Poser now emulates + the ADC, and so no longer needs to patch certain traps. + +* Removed spaces from ROM Transfer file names. + +* In 3.0a7, added ability to pass-through keyboard modifiers to the + Palm OS. However, I forgot to implement this on non-Windows + platforms. Fixed that oversight. [Dave Johnson] + +* (Unix) Fixed problem where you could save a screen shot only if the + target file already existed. [Michael Nordstom] + +* (Unix) Allow multiple .prc (et al) files to be loaded at the same + time from the "Get File" dialog. [Michael Nordstrom] + +* (Unix) Updated Gremlins menu items after a Gremlin has been + started. [Michael Nordstrom] + +* (Unix) Remember last-accessed directory when the File dialog is + presented, and re-show that directory the next time the dialog is + displayed. [Michael Nordstrom] + +* Fixed inability to use serial port when emulating the EZ-based Palm + VII or the Palm VIIx. [Jason Simpkins] + +* Added support for RTS_CONT bit in the Dragonball UART register. + This gives better support for applications doing hardware + handshaking. + +* Before closing the host serial port in response to the emulated + UART being shutdown, make sure that all locally buffered data is + transmitted. + +* Worked around that d*** bug in Palm OS 3.3 that would cause it to + overflow the kernel stack on a reset. Now, if Poser detects a stack + overflow and it's the kernel stack, Poser lets it overflow into the + interrupt stack (which appears right below it in RAM); Poser just + holds off interrupts for as long as the stack has overflowed. + +* Map Ctrl-P to vchrPrevField, to match Ctrl-N mapping to + vchrNextField. [Ben Combee, David Slotter] + +* (Mac) Worked around problem with items in progress dialogs not + showing up immediately (or, sometimes, at all). For instance, in + the dialog tracking the progress of the installation of databases, + the Cancel button and "Files remaining" text didn't appear until + after the first file was completely installed. I now manually + activate and update the dialog after making it visible. + +* Hide a Palm OS 1.0 bug that would access memory location 0xC2 in + HwrSleep. + +* (Windows) Support double-clicking on a .rom file in order to launch + Poser. Before, doing this would crash Poser, as it thought the file + was a session file. Note that you need to run Poser once by itself + first in order to update the appropriate Registry entries. + +* Fixed problems with Poser allowing access to certain system globals + from certain RAM-based functions (such access is usually + disallowed). The affected globals were tsmFepLibStatusP and + tsmFepLibRefNum, which can be accessed by the glue function + TsmGlueGetFepGlobals. + +* Secure Web-based transactions would result in Poser displaying an + error message about memory accesses to "unallocated memory", + "unlocked memory", "memory manager data structures", etc. These + messages are now no longer displayed. + +* Fixed Palm Debugger fb, fw, fl and ft commands. Poser's response + to the Find debugger packet was incorrect. [Bob Petersen] + +* Fixed removal of breakpoints. Poser was disabling them instead of + out-and-out removing them. The effect that old breakpoints would + re-appear, albeit disabled, in PalmDebugger. [Bob Petersen] + +* Reimplemented HostFSetPos and HostFGetPos in terms of fseek and + ftell. Previously, they were implemented in terms of fsetpos and + fgetpos, but those functions aren't portable, in that the definition + of fpos_t changes from platform to platform. + +* Merged in TRGpro support from TRGnet. [Dan Smith] + +* (Internal) Massive rewrite of the core emulation/session handler. + + Previously, a single sub-system was responsible for creating, + loading, saving, resetting, and freeing sessions; emulating the + Dragonball core instruction set; and taking care of "Palm OS + smarts", where checking based knowledge of how the Palm OS and Palm + OS applications was used to enforce correct behavior. Additionally, + the interface to this massive, heterogeneous sub- system was + different depending on whether Poser was being built for a platform + that supported multi-threaded applications or not. + + Now that's all been changed. There's an EmSession sub-system that + takes care of processor- and platform-independent session creation, + deletion, etc. There's an abstract EmCPU class and a concrete + EmCPU68K subclass responsible for emulating the 68xxx instruction + set. And there's an EmPalmOS sub-system responsible for knowing how + the Palm OS works and enforcing correct behavior. + + With these changes, Poser should be in a better position to support + different processors (like ARM) and operating systems (like Linux, + or even future versions of Palm OS that operate significantly + different from the current one). And with a more unified interface + to these new sub-systems, the higher levels of Poser can now also be + rewritten to be more cross-platform. + +* (Unix) Fixed (finally?) problem with LCD not appearing to turn off + when the power button is clicked to turn off the emulated device. + +* (Unix) Resize and relayout the generic error message dialog box, + instead of putting the (could be long, could be short) error text in + a scrollable field. + +* If INetLib tries creating its default preferences with a proxy + server address of 207.240.80.136 (an old, obsolete address), replace + it with 209.247.202.106 (the current address). + +* Fixed support for loading Palm VIIx ROM images downloaded from an + actual device (as opposed to the ROM images on the www.palmos.com + site). The problem was that the code used to determine what device + a ROM image is intended for was tripping up on that image's format, + and so misidentified the ROM. + +* (Windows) Fixed crash that could occur when clicking on some + Logging Options dialog buttons. + +* Let the Palm OS function dns_decode_name read off the end of a + buffer. I'm not sure yet why this happens, but until I do, let it + happen. Otherwise, developers will be presented with an error + dialog they can't do anything about. [Doitchinov Ivan] + +* Cleaned up, simplified, and robustified the mechanism used to + implement the AutoRunAndQuit directory feature. Poser used to have + a complex and (apparently) fragile mechanism for tracking calls to + SysUIAppSwitch, SysAppLaunch, SysAppStartup, and SysAppExit in order + to make sure that when the desired application exitted that Poser + quit. That's all been thrown out. Now, when an application quits, + Poser merely checks (in SysAppExit) to see if its cardNo and dbID + match that of the target application. + +* Fixed problem with logging posted/received events with Japanese + ROMs on Little-Endian host computers. Poser wasn't byteswapping the + event data, and so was trying to fetch some data at the wrong memory + location. + +* Address two of the three cases where calling a Palm OS function + which causes an exception can crash the emulator: + + 1. When handling an RPC call (e.g., try "hd 3" from + PalmDebugger). + 2. When calling a Palm OS function in a trap patch. + + We still don't handle the third case: + + 3. When calling a Palm OS function in the UI thread (e.g., when + building the Gremlin application list). + +* When a hardware exception (such as a bus error) occurs, Poser first + tries to contact any attached debugger. If it can't find one, it + displays an error message containing Debug and Reset buttons. + Pressing Reset will reset the device. Pressing Debug will try again + to contact a debugger. If it continues to fail, it continues to + display the same dialog, until either the user presses Reset or a + debugger is finally found. + +* (Mac) Added two new HostControl functions: + + HostProfileGetCycles() + Returns the current running CPU cycle count. As with all + profiling-related HostControl functions, this one is available + only in the profiling version of the emulator. + + HostSaveScreen(const char*) + Saves the LCD frame buffer to the given file name. + +* For its own purposes, Poser tracks memory allocations and de- + allocations in the Palm OS dynamic heap. In general, except when + the Palm OS dynamic heap is in flux (because an allocation or + deallocation is in process), Poser's notion of the heap state should + match Palm OS's. However, Poser was failing to keep its notion in + sync with Palm OS's in the case where a memory allocation was + requested and failed. It was possible for the heap to be compacted + and for Poser to not notice and sync up with that compaction. This + error could lead to Poser reporting errors when it shouldn't or not + reporting errors when it should. + +* Fixed problem where Poser could crash if the emulated application + tried accessing memory location 0xFFFFFFFF. + +* Fixed problem with the appInfo block not getting installed if the + .pdb file being installed didn't have any records in it. + + +Changes for 3.0a7 (2000-08-07) +------------------------------ +* Interim internal release dates: + 3.0a7e1 - 2000-04-19 + 3.0a7e2 - 2000-04-25 + 3.0a7e3 - 2000-04-28 + 3.0a7e4 - 2000-05-31 + 3.0a7e5 - 2000-07-07 + 3.0a7e6 - 2000-07-17 + 3.0a7e7 - 2000-07-18 + 3.0a7e8 - 2000-07-31 + 3.0a7e9 - 2000-08-04 + 3.0a7e10 - 2000-08-09 + +* Added m100 support. + +* Added Palm VIIx support. + +* Implemented the following previously defined but unimplemenated + HostControl functions: HostMalloc, HostRealloc, HostFree, + HostRename, HostRemove, and HostTmpNam. + +* Added the following HostControl functions: HostStat, HostTruncate, + HostMkDir, HostRmDir, HostOpenDir, HostReadDir, HostCloseDir, + HostAscTime, HostClock, HostCTime, HostGMTime, HostLocalTime, + HostStrFPrint, HostTime, and HostUTime. + +* Added the following HostControl functions: HostSlotMax, + HostSlotRoot, and HostSlotHasCard. + +* Added Card Options dialog. + +* Renamed a bunch of HostControl types to follow Palm's naming + convention of having types end in "Type". Added typedefs for + backward compatibility with applications using the old type names. + +* When a session is reset, all HostControl resources are reclaimed. + That is, any blocks allocated with HostMalloc are freed, any files + opened with HostFOpen are closed, any directories opened with + HostOpenDir are closed, and any pointers to returned string buffers + (as with HostGetEnv) are now invalid and the buffers are + inaccessible. + +* After creating a handle with MemHandleNew, locking it, remembering + the pointer, and then freeing the handle with MemHandleFree, the + application could write to the freed block using the now-stale + pointer. Fixed. [Neil Rhodes] + +* Support TsmGlueGetFepGlobals accessing system globals. + +* Updated URLs to point to www.palmos.com. + +* Fixed double-dispose bug when handing the getting or setting of a + linger-related socket option. The symptom of this bug is that Poser + would crash when calling NetLibSocketOptionGet(...netSocketOptSock- + Linger...). [Peter Burka] + +* Fixed problem in NetLibSendPB when NetLib redirection is turned on; + the various parameters weren't converted correctly into something + the host TCP stack could use. [Rob Leslie] + +* (Unix) Added dynamic check for socklen_t in configure.in. [Radu + Cornea] + +* Internal change: added new support classes: EmPoint, EmRect, + EmRegion, EmRefCounted, EmRefCounter, and EmPixMap. + +* Used the preceding classes in rewriting the pipeline that converts + the LCD framebuffer into something that can be displayed on the host + screen. These changes (a) better insulate much of Poser from the + specifics of the LCD framebuffer format, (b) reduce the amount of + platform-specific code needed to create a bitmap that can be blitted + to the host screen, and (c) result in slightly faster emulation. + +* Poser makes use of the following as a compile-time assert: + + char _dummy[expr ? 1 : 0]; + + If (expr) is true, then the compiler evaluates the stuff inside the + brackets as 1. Otherwise, the compiler evaluates it to zero, + resulting in the invalid definition of a zero-sized array. However, + unbeknownst to this poor programmer, gcc allows the definition of + zero-sized arrays as an extension. Therefore, all instances of the + above technique have been changed to COMPILE_TIME_ASSERT(expr), + where COMPILE_TIME_ASSERT is a macro that expands to something like: + + char _dummy[expr ? 1 : -1]; + + Even gcc complains about that one. [Frank Yellin] + +* Now that we have a working compile-time assert, a number of errors + popped up. Part of the NetLib redirection facility involves + translating between NetLib data structures and host TCP (sockets) + data structures. The process of translating back and forth assumed + that various structs and constants between the two systems were the + same and could be copied back and forth without any interpretation. + This assumption was backed up by compile-time asserts. But those + asserts were broken. Now that they're working, it was found that + many assumptions were bad and/or wrong. Therefore, much of the + translation code was rewritten to remove those assumptions. [Frank + Yellin] + +* (Unix) Turn on -fexceptions unconditionally. While this is on by + default for C++, we now turn it on for C, too. Poser seems to need + this on Solaris/Sparc systems. [Frank Yellin] + +* (Unix) Implemented Save Screen... menu item. Files are saved to + .ppm format. + +* (Internal) Implemented EmDlg::DoGetFile, DoGetFileList, DoPutFile, + and DoGetDirectory on all platforms, and use them universally. + +* Added HostGetFile, HostPutFile, and HostGetDirectory. + +* (Unix) Use new "FileChooser" widget from Easy Software. This one + will probably get incorporated into FLTK 2.0, and it just plain + looks and works nicer anyway. [Easy Software] + +* Patched TblHandleEvent to fix a Palm OS 3.5 bug where the drawing + state would eventually become invalid, resulting in incorrect + drawing and possible ErrDisplays from the OS. [Tom Bulatewicz] + +* Inhibit error checking in NetLibBitMove. This function sometimes + accesses bytes past the end of an allocate block of memory, + resulting in a Poser error message, usually while using PQAs. As it + turns out, it does this in a fairly safe fashion, so prevent the + error message from appearing. + +* (Internal) Use new method to access low-memory Palm OS System + globals -- one based on the EmPalmStructs mechanism. + +* The progress dialog that's displayed when installing files has + changed. The progress indicator is now modelled after the Macintosh + file copy progress dialog; instead of having two indicators -- one + for files and one for the current file -- the single progress + indicator now indicates overall progress for all files being + installed. Also, the Stop button now works. Finally, the progress + dialog is now also implemented on Unix. + +* Enabled logging of Exchange Manager actions (just calls to ExgSend + and ExgReceive). + +* (Internal) New Session dialog is now implemented using cross- + platform techniques that Poser is slowly moving towards. This + change results in consistant behavior of the dialog across + platforms. + +* (Unix) "configure" script now supports "--with-fltk=DIR" command + line option. [Arturo Tena] + +* Poser contains facilities for extracting the "Macsbug" symbols that + can be appended to compiled functions for debugging purposes. It + finds these symbols using heuristic methods that don't always + succeed. If they fail, fail gracefully. [Adam Dingle] + +* Fixed problem where turning off the "power" to a Palm IIIc would + blank the LCD, but turning the "power" back on would not redraw the + LCD. [Bob Petersen] + +* Fixed implementation of Perl wrapper for HostImportFile and + HostExportFile. [Derek Johnson, Andy Ihlenfeldt, John Ludwig] + +* Poser would crash if you passed a full path to HostProfileDump + instead of just the name of a file. + +* Ensure that the binary file produced by profiling an application + ends with .mwp. + +* Include keyboard modifiers when posting key events from the host + computer's keyboard. [Ken Krugler] + +* Changed "New Session" dialog to use MRU list for ROM Files, and not + present devices for selection that cannot possibly run the chosen + ROM File. + +* Updated CodeWarrior projects to CodeWarrior 5.3 (IDE 4.0.4). + +* Fixed problem with lack of responsiveness in mouse-click handling. + The problem was that there was only a 1-element queue, as it were, + for handling mouse-clicks. It was too easy for the user to click + the mouse and let up on the button before the emulated Palm OS had a + chance to even recognize that the mouse button was down. Now there + is an n-element queue to handle mouse ups/downs. I had originally + stayed away from that because I thought that it would be too easy + for the user to overrun the event queue, zooming the mouse around + faster than the Palm OS could keep up. But we'll see how this works + out. Note that the hard buttons across the bottom of the the + emulated device can still be unresponsive. That's because there's + no queuing involved; the mechanism for handling them is different + from that used to handle events in the LCD area, and can't easily be + converted to do so. + +* (Unix) Fixed problem with specifying desktop serial port to use for + ROM Transfer. [Rick Richardson] + +* Catch a whole class of problems where Poser didn't detect when the + emulated program counter went bad. [Eugene Chin] + +* Fixed byteswapping problems with creating the binary output file + for profiling. Such a file created on Windows couldn't be read into + MW Profiler on a Mac. [Greg Simon] + +* (Internal) Rewrote all of the emulation code that deals with + hardware registers (such as the Dragonball registers). There were + many subsystems that had to deal with memory in this way (the + Dragonball (328, EZ) register handlers, the SED register handlers, + the Visor USB register handlers, the Palm VII EZ PLD register + handlers, the Sybol ASIC register handlers, etc.). All of these + subsystems originally were just cloned from each other and tweaked. + This lead to a lot of duplicated code. All that's now been changed + so that the common code is in EmBankRegs, and the hardware-specific + code is in subclasses of EmRegs. + +* (Mac) Fixed crash that would happen when clicking on the mailto URL + in the Palm section of the About box. + +* The Field Manager in Palm OS 1.0 - 3.2 has a bug that causes the + message "Invalid insertion point location" to be erroneously + displayed. Added a patch to ErrDisplayFileLineMsg to squelch this + message if it looks incorrect. [Stephen P. Hill, David Kendall] + +* (Mac) Updated to GUSI 2.1.1, fixing a bug in HostFOpen, where + creating the file ":x:y" would create a file called "x" if the + directory didn't exist. + +* (Unix) Re-arranged checks at bottom of EmulatorTypes.h to allow + for definition of INADDR_LOOPBACK. [Jon Fo] + +* (Unix) Specify -fpermissive to gcc to support broken X11 headers. + [Jon Fo] + + +Changes for 3.0a6 (2000-04-19) +------------------------------ +* Interim internal release dates: + 3.0a6e1 - 2000-03-06 + 3.0a6e2 - 2000-03-13 + 3.0a6e3 - not released + 3.0a6e4 - 2000-03-24 + 3.0a6e5 - 2000-03-31 + 3.0a6e6 - 2000-04-10 + 3.0a6e7 - 2000-04-12 + 3.0a6e8 - 2000-04-17 + +* (Unix) Support POSER_DIR environment variable. If this variable + exists, Poser uses it as the root for all files it uses (including + preferences, Gremlin States, log files, and skin files). Otherwise, + it uses HOME. + +* External skin support. A "skin" is something that defines the + appearance of an application. Palm OS Emulator uses skins for each + device that it emulates. Until this release, skins were built into + Poser and couldn't be changed without recompiling the application. + Now, skins are stored in external files that Poser locates and uses. + + When starting up, Poser looks for a directory starting with the text + "Skins" (that is, it may be "Skins", "Skins.Palm", "Skins.Personal", + etc.). Poser looks for all such directories in its own directory + (that is, the directory in which it resides on Mac or Windows, or + POSER_DIR on Unix), as well as that directory's parent and + grandparent directories. + + For each such directory it finds, it scans the contents for files + ending with ".skin". These files are text files that describe the + skin. Associated with each .skin file are two graphics files that + define the appearance of the skin (in single and double size mode). + + All of Poser's previously built-in images are now provided + seperately in a Skin archive available on Poser's Web pages. This + archive includes a ReadMe.txt file that describes how to create your + own skins. + +* Internal change: as part of the skin implementation, a number of + file handling and streaming classes were replaced with a new, more + consistant set. The following classes: + + FileReference + StreamHandle + BufferHandle + FileHandle + PPStream + ChunkStream + + Have been replaced with: + + EmDirRef + EmFileRef + EmStream + EmStreamBlock + EmStreamChunk + EmStreamFile + + Testing note: + + All File I/O is affected by this change. The following places + need to be tested to make sure they're not broken: + + Reading + AutoLoad, AutoRun, AutoRunAndQuit directories + Files specified to be loaded via cmd line. + Loading PDB, PRC, and PQA files. + Loading skin files (.skin and .jpg files). + Loading Preference file + Loading PSF files + Loading ROM files + + Writing/Creating + Exporting PRC, PDB, and PQA files (both via the menu + item and via HostExportFile). + Saving screen shots. + Saving PSF files + Saving preferences + Saving downloaded ROM file. + Saving Logging files + Saving Profile files. + +* Our patch to SndDoCmd now initializes the return value. [David + Slotter] + +* (Unix) AutoLoad, AutoRun, and AutoRunAndQuit directories now + supported. + +* (Windows) Binder utility now merged into Poser directly (see the + "Save Bound Emulator..." menu item). + + "Binding" Poser means to create a new version of Poser based on the + settings in the currently running Poser. A new executable is + created that includes a ROM image, configuration settings, skins, + and optionally a RAM image (the stuff that goes into a .psf file). + All of this information is taken from the current settings in the + running Poser. The result is a new Poser that is self-contained and + runs stand-alone. + + When binding Poser, you'll be presented with two options: + + * Create a version that always creates a new session based on + the current emulator settings + + * Create a version that restores the current session + + Selecting the first option creates a version of Poser bound with a + ROM image, configuration settings, and appropriate skins. When + launched, this version of Poser will always create a new session + based on those settings. + + Selecting the second option creates a version of Poser that is also + bound with a RAM image. When launched, this version of Poser will + always restore the state that is stored in that image. This is + effectively the same as reloading a .psf file. + + In both cases, Poser functionality is abbreviated. Because much + information is now specified by the bound items, menu items used to + create, save, and load sessions and session files are removed. And + since bound Posers are intended to be used in demo, kiosk, or other + closely controlled environments, most developer-related menu items + are also removed. + +* Fixed a problem where NetLibReceivePB could return netErrParamErr + instead of a more informative error code. [Frank Yellin] + +* Fixed a problem where NetLibReceivePB where an in/out parameter + passed to recvfrom was not initialized first. [Frank Yellin] + +* When emulating NetLib calls by turning them into host TCP calls, + and an error occurs, add a log message (if NetLib logging is turned + on) that describes how the host error code is translated into a + NetLib error code. + +* Implement the documented -skin and -silkscreen command-line + options. + +* Got rid of problem that prevented Poser from running on Macs with + more than 256 Meg of RAM (and which could have lead to problems on + other platforms as well). + + Details: + + (First, some terminology. In the discussion below, "host address + space" refers to the memory that any Windows, Mac OS, or Unix + application sees and manipulates. "Emulated address space" refers + to the memory that the Palm OS or a Palm OS application sees. It is + up to Poser to make the host address space look like emulated + address space.) + + Poser emulates memory by allocating some buffers in the host's heap + to "back" the various memory ranges utilized by the Palm OS. For + instance, it creates buffers to represent RAM, ROM, and the + Dragonball registers. Whenever a memory access is performed, Poser + determines which of these buffers is required, calculates the + correct offset into that buffer, and fetches or stores as + appropriate. These buffers are used to create the illusion of the + emulated address space. + + On occassion, it is necessary for Poser to magically make more + memory "appear" to the emulated process. That is, the emulated + process needs to be granted access to memory other than that + normally needed to emulate a true Palm OS environment. A chief + example of this is when loading a .prc file. Poser performs the + install process by creating the database, creating the records in + the database, and then copying the record contents from the .prc + file to the records in the database it created. This copying is + done by calling DmWrite. But the source of the DmWrite is a buffer + that Poser allocated to hold the contents of the .prc file. This + buffer is not one of the standard buffers Poser uses to emulate the + any of the standard memory ranges that a Palm OS process can access. + + In order -- in this example -- for DmWrite to access the bytes in + the file buffer Poser allocated, Poser temporarily "maps" arbitrary + ranges into the emulated address space. Ranges that are mapped in + can be accessed by Palm OS processes. However, this mapping did not + undergo any address translation. That is, if the buffer holding the + .prc file happened to have been allocated at memory location + 0x01234560 by Windows, the Mac OS, Unix, or whatever, then Poser + would map that buffer into memory location 0x01234560 in the Palm + address space. + + This was OK, except when memory ranges mapped into the emulated + space overlapped with standard memory ranges in the emulated space. + For instance, on Macs with lots of RAM (greater than 256 Meg, at + least), Poser could easily make a memory allocation that return an + address > 0x10000000. If the buffer that was allocated were actually + in the range 0x10C00000 - 0x10E00000 (or whatever the ROM range + was), then when Poser attempted to "map in" that buffer, it would + fail because of the overlap. + + Now, finally, this problem is fixed. Poser now performs memory + address translation. Segments of memory mapped into the emulated + address space are now mapped in so that they appear at 0x60000000 - + 0x6FFFFFFF. + +* When checking for the validity of calls to shared library + functions, don't allow a refnum of zero. Also, display a specific + error message when an invalid library refnum is detected. [Frank + Yellin] + +* (Unix) Fixed problem with crashing on Sparc systems when loading + .prc files. [Frank Yellin] + +* Silently ignore a bug in an internal Palm OS 3.3 function + (PrvConvertDepth1To2BW) that causes it to walk off the end of an + allocated memory chunk by a single byte when reading from it. + +* Slightly more rigorous PC validation. Previously, I'd just check + to see if the PC were in a valid address space (RAM, ROM, Dragonball + register, etc.). Now only RAM or ROM addresses are allowed. [Frank + Yellin] + +* HostFFlush (HostLogFile()) now writes the log file to disk. + +* Re-hooked up the "Logging Options..." button in the New Gremlin + dialog box. In order to do this, utilized some cross-platform + dialog handling routines that are slowly being phased in. As a + result of these new routines, the dialog box has been changed from a + multi-panel dialog on Mac and Windows to a non-panel dialog box (as + was on Unix). + +* (Unix) No longer hide and reshow the main window when establishing + a new skin (either as part of the Skins dialog, or as part of + loading/creating a session). This process was an attemp to work- + around an FLTK problem where the X frame window didn't properly + resize itself. This workaround didn't work, and another one has + been put in place, so the old one's taken out. + +* (Unix) Change the filter button to use only lower-case suffixes. + With both upper and lowercase, the text in the filter button would + overflow its bounds. [Jon Aslund] + +* (Unix) When opening a saved session file while a current session is + already running, Poser would attempt to close the first session's + thread twice, and then attempt to start the second session's thread + twice. This would often lead Poser to hang. Now each of those is + done just once. [Jon Aslund] + +* (Unix) Instead of crashing, report errors that occur while creating + a new session or loading an old one. [Jon Aslund] + +* (Unix) Added BSD/OS 4.1 support. [Bert Driehuis] + +* Allow TsmGlueGetFepMode and TsmGlueSetFepMode access to system + globals. + +* (Windows) Fixed bug where creating a new session in Poser, quitting + without saving, and then starting Poser using the -psf command line + option would result in a new session being created again instead of + loading the specified session file. + +* ROM Transfer project updated to use SDK 3.5. + +* Internal change: previously, when Poser had to manipulate data in + Palm OS format, it used the structs in the Palm OS headers directly. + However, that assumed that we could convince all the compilers used + to build Poser to lay out those structs correctly (that is, with the + same size and alignment as the 68K compiler used to build the Palm + OS ROM and Palm OS applications). This assumption is almost true, + but not quite. Therefore, with this release, a new mechanism for + manipulating Palm OS structs is used. This mechanism (see the + EmPalmStructs.xxx files) allows Poser to access structs in a + platform-, compiler-, and endian-independent fashion. + + Currently, this new mechanism is used only in the area of sending + and receiving packets from external clients (debuggers and scripts). + Eventually, it will be used in all aspects of Poser operation. Once + this switchover is complete, we'll be mostly independent of the Palm + header files, and will probably be able to get rid of most of + contents of the the Byteswapping.xxx files. + +* Fixed problem with our patch to NetLibReceive. The exact problem + being solved was one where NetLibReceive was called, received some + data, the application modified that data in the buffer that received + the data, and then call NetLibReceive again. No bytes were + available, but the contents of the buffer were updated with the + contents of the previous receive, thus wiping out the modified + buffer contents. The application was relying on the buffer not + changing, and so failed when it actually did. + +* Fixed problems with ROM Transfer not running on Palm OS 1.0. + [Vladimir Amarante] + +* Fixed problem with trying to boot a ROM from a Palm V device that + had originally been installed with Palm OS 3.1 but was lateer + upgraded to Palm OS 3.3. [Douglas R. Shefsky] + +* (Windows) Fixed a problem with not reading the entire preferences + file. + +* (Unix) Fixed problem with clicking in a non-active area of the + window (that is, outside of any button or LCD area). + +* (Unix) Added ROM Transfer project (with prc-tools 2.0 compatible + Makefile) and pre-built ROM Transfer.prc application that can + be installed with something like pilot-xfer. + +* (Unix) Fixed problem that could lead to unexpected results when + running certain dialogs after other certain dialogs (FLTK wasn't + clearing out a reference to a widget in the first dialog, + causing the second to crash). + +* (Unix) Remapped EINPROGRESS (as returned by sockets functions) + to netErrWouldBlock instead of netErrSocketBusy (as NetMgr.h + would suggest). This change allows Network HotSync to work + between a Unix box and a Windows box. + + +Changes for 3.0a5 (2000-03-06) +------------------------------ +* Interim internal release dates: + 3.0a5e1 - 2000-02-25 + 3.0a5e2 - 2000-02-25 + 3.0a5e3 - 2000-03-01 + 3.0a5e4 - 2000-03-03 + +* Internal change: major change in the way the Dragonball and + DragonballEZ registers are handled for different devices. + Previously, there were two sub-systems: one that handled Dragonball + registers, and one that handled DragonballEZ registers. Any device + differences withing those two categories were handled with a set of + conditional statements. That mechanism started breaking down (the + conditionals were getting too twisty), so now device support is + broken down with a set of classes having the following hierarchy: + + EmRegs - fairly abstract base class + EmRegs328 - mildly abstract base class implementing Dragonball emulation common to all 328 devices + EmRegs328Pilot, EmRegs328PalmPilot, etc. - concrete base class filling in the missing, custom pieces for a specific device + EmRegsEZ - mildly abstract base class implementing Dragonball emulation common to all EZ devices + EmRegsEZPalmIIIx, EmRegsPalmV, etc. - concrete base class filling in the missing, custom pieces for a specific device + +* Added Symbol 1700 support. Note that Symbol-specific hardware is + not yet emulated. Attempting to use scanner or Spectrum facilities + will hang the device. [Ron Kupke, Darren Kropp, John Duhart, Harini + Bharadvaj] + +* Changed the way serial emulation is performed a little bit. + Before, I'd look at the UART-enable bit to determine whether or not + to open or close the host's serial port. However, that would lead + to problems on Unix when using pseudo-devices. While opening the + serial port, the Palm OS would enable and disable the UART several + times as it was configuring the communications. This would lead to + the host serial port being opened and closed several times. But + Unix pseudo-devices don't react to that usage very well. So now, + Poser looks at the serial line driver enable bit. This bit is + toggled just once at the beginning and end of a serial port session, + just like we want. [Eskil Heyn Olsen] + +* Fixed problem with serial emulation not working on Palm VII EZ. + +* Fixed problem where reloading a .psf file that had a Gremlin + running would not correctly install the Gremlin-specific logging + options. + +* Fixed problem affecting Gremlin reproducability. There was a patch + on KeyCurrentState to randomly set key bits when a Gremlin was + running. However, the RNG used to set the bits was in no way + synchronized with the RNG used to generate Gremlin events, nor was + it ever reset in any way when a Gremlin was started or restarted. + The effect was that any application that was sensitive to the + results of KeyCurrentState would react randomly. One example of + this was the Address Book, which looked to see if the Address Book + hard key was pressed in order to see if the user wanted to beam + his/her business card. + +* Fixed problem affecting Gremlin reproducability. Some applications + are sensitive to time and timing issues. Gremlins now tries to make + sure that all forms of time (including the DragonBall cycle counter, + the kernel's tick counter, the Palm OS tick counter, and the + Dragonball real-time clock) are all set to consistant values when a + Gremlin is started and restored when a Gremlin-active .psf file is + reloaded (the cycle and tick counters are set to zero, and the RTC + is set to 3:00pm). Also, when a Gremlin is running, the real-time + clock is unhooked from the host's clock (normally, the values read + from the Dragonball real-time clock are generated from the host's + clock functions). Instead, the RTC is incremented assuming that the + average instruction takes 12 cycles, and where the cycle time is + based on the Dragonball's PLL registers. + +* Set the chip and mask IDs. This is set to the 1H58B part for the + 328, and 1J83G for the EZ. + +* (Unix) Fixed problem with Logging Options dialog hanging. + +* Check PC and stack pointer when doing a TRAP #$F dispatch. + +* More up-to-date instructions for Network HotSyncing with Poser. + [Brian Mathis] + + These instructions are intended for developers or other POSE users + who want to synchronize the Palm OS Emulator with the same PC they + are running POSE on. Modifications to these directions may be + needed if a user wishes to synchronize with a PC on an attached + network. They were written on a Windows machine, and probably have + Windows specific instructions in them. It should be pretty painless + to adapt them to other platforms that support hotsyncing. + + These are current for version 30a3 and 30a4 of POSE emulating a Palm + V, OS 3.1, and Hotsync version 3.0.1/3.0.4, Windows 98 & NT. + + ----Configure Hotsync on your Desktop PC + + 1. Right-Click the hotsync icon in the system tray + + 2. Enable "Network". A check mark will appear next to it if it's + already enabled. + + ----Configure POSE: + + 1. Right-Click on the POSE window to bring up the Menu. Choose + "Settings/Properties". + + 2. Check the box next to "Redirect NetLib Calls to TCP/IP". + + 3. Click "OK" + + ----Configure Hotsync on the Palm + + 1. Open the "HotSync App". + + 2. "Menu/Options/Modem Sync Preferences" - set to "Network" + + 3. "Menu/Options/LANSync Preferences" - set to "LANSync" + + 4. "Menu/Options/Primary PC Setup" - enter "127.0.0.1" under + "Primary PC Address" (the middle one) + + 5. Under the "Modem Sync" icon on the main Hotsync screen, tap + "Select Service". Then tap "Done". You don't need to change any + info, you just need to have something selected. You can create a + new profile if you like. + + 6. Tap the "Modem Sync" button. Your PC should now kick into + action, and will probably ask you to choose an account, or create a + new one. It is highly recommended that you create a new account + just for POSE. + + See also the following KnowledgeBase article: + + + +* Information from TRGnet on TRGpro support. [Mike Walter] + + TRGpro support for POSE + + Version 3.0a4 includes limited support for TRGpro emulation. This + version emulates the FAT file system API provided on the TRGpro. It + does not support the lower level CompactFlash API or the enhanced + audio API on the TRGpro. + + In order to emulate the TRGpro Fat file system, do the following: + + 1. Obtain a PalmOS 3.3 image from any device. (PalmIIIx, PalmV, + etc) + + 2. Modify file "Palm OS Emulator.ini" in your Windows + subdirectory. Change to line FfsHome to point to a subdirectory on + your drive. + + Example "FfsHome=C:\POSE\ + + 3. Put desired Palm programs and databases into subdirectory + specified above. + + 4. Run Emulator.exe. + + 5. Install the programs ffs_pose.prc and CFPro.prc onto emulator. + + 6. Run CFPro to move files back and forth between Emulator and + PC's subdirectory. + + Developers writing code for the FAT file system can now debug using + POSE. + + More documentation will be provided later, specifying exactly what + is and is not supported with the emulator. For example, card + insert/remove messages are not supported with this version. + + For those of you interested, the files modified/added to the POSE + software base were, Platform_FfsLibWin.cpp and + TrapPatches_FfsLib.cpp. + + Keep in mind that this is a first beta release, if you have any + questions or problems, email TRGnet directly. + + Zip file containing ffs_pose.prc and CFPro.prc can be downloaded + from: + + http://www.trgnet.com/download/pose/fat.zip + + POSE version 3.0a4 or greater can be downloaded from: + + http://www.palmos.com/dev/tech/tools/emulator/> + +* "Pen" events are essentially created as needed and inserted into + the Palm OS on demand from mouse events by way of a patch on the + SysEventGet function. However, until now, there was no + corresponding patch to EvtSysEventAvail to make that function return + true if the host mouse was down. Now there is. [Michael Nordstrom] + +* Added back long paths for MRU menus. [Chris Antos] + +* (Windows) Made F11 minimize the window. [Chris Antos] + +* (Windows) Swapped positions of About and Exit menu items. [Carlton + Craighead] + +* Simplified Skins dialog. + +* Simplified Gremlins dialog. Instead of entering magic numbers like + zero and -1, use checkboxes to enable desired features. + +* Added Palm IIIc skins. Renamed "Color Device" to Palm IIIc. + +* Added UsingPOSE.pdf. + +* (Unix) Implemented "File/Save" menu item. [Dan Poirier] + +* (Unix) Fixed problem where UART::Initialize would get called twice + when reloading a .psf file, triggering an assert. [Dan Poirier] + +* (Windows) Fixed problem with not setting the skin palette when + using the generic skin on 8-bit monitors. [Andreas Linke] + +* Removed SndInit patch that would set the system volume level to + zero, mirroring what happens in the simulator. However, this + caused problems with people not hearing sounds when they expected + to. So, removed the patch. If you don't want sound, turn it off + in the Preferences/Properties dialog. [Frederic Paolucci] + +* (Unix) Building under Solaris 2.6 (with gcc installed) is now + possible. It's probable that building under other SunOS environments + won't work. + +* (Unix) The window resizes to match skin selections. + +* Export Database dialog now primarily lists the actual database name, + with the application icon name in parentheses if it differs. + + +Changes for 3.0a4 (2000-01-28) +------------------------------ +* Interim internal release dates: + 3.0a4e1 - 1999-12-02 + 3.0a4e2 - 1999-12-30 + 3.0a4e3 - 2000-01-07 + 3.0a4e4 - 2000-01-23 + 3.0a4e5 - 2000-01-26 + 3.0a4e6 - 2000-01-27 + +* Yow...time to start updating those copyright statements...again... + and this time there's a lot more files! + +* When installing a .prc file, check for duplicate resources. + +* Provide better error messages when something goes awry while + installing an application or database. + +* Added support for Palm IIIe and Palm Vx: + + - Added as items to Device menu. + - Added code to save those devices as preferences. + - Added as -device parameters on command line ("PalmIIIe" and "PalmVx"). + - Added and mapped in appropriate skins. + - Added new internal type IDs. + - Corresponding tweaks to Binder application. + - Made Palm IIIe return same device ID as Palm IIIx. + - Made Palm Vx return same device ID as Palm V. + +* (Mac) Updated to GUSI 2.0.1. This has the following benefits: + + - Adds support for socket options. + - Based on Open Transport instead of Mac TCP. + - Fixes problem with menus sometimes getting disabled (the + old GUSI would eat up "resume" events, so PowerPlant didn't + know to re-enable the UI). + +* Fixed problem where Poser's heap walking routines were vulnerable + to odd master pointers. [Mike Chen] + +* Gremlins wasn't generating and posting hard button events properly. + [Steve Lemke] + +* (Unix) Fixed problem with trying to delete a skin with a stale + pointer. [Ben Darnell] + +* Updated ROM Transfer.mcp to CodeWarrior for Palm OS R6. + +* Support for the gdb debugger has been built-in for quite some time + (since 2.1d22 or so). Here, finally, are some instructions for + interacting with it. Note that you no longer need to use gdbpanel + or gdbplug if you were using those with earlier versions of Poser, + Copilot, or xcopilot. [Ben Thomas] + + - Build your app. Be sure to _both_ compile and link with -g + (e.g., "gcc -g ..."). On the compile pass, this generates the + necessary symbol information; on the link pass it forces the + inclusion of a debug runtime code that results in a breakpoint + being installed in PilotMain when the app starts. + + - Start Poser. + + - Load your app into Poser. + + - Start gdb, loading your application's symbol table (e.g., "gdb + myApp"). Note that the file to be loaded is the "myApp" file + created by the GCC link pass, not "myApp.prc" created by + buildprc. + + - Type "target pilot localhost:2000" to gdb. It should respond + with a message along the lines of "Remote debugging under PalmOS + using localhost:2000. Waiting... (Press Ctrl-C to connect to + halted machine)". + + - Start your app on Poser. + + - Wait for gdb to see the initial breakpoint and prompt you. + + - Start debugging. + +* Tweaks to the scripting samples: [Flash Sheridan, Steve Haneman] + + - Wait() no long automatically resumes. + - Added seperate Resume function + - Since wait no longer resumes, added TapPenSync, and TapButtonSync + which automatically call Wait and Resume at the beginning and end. + - Fixed some warnings that showed up when running Perl -w. + - Added MemPtrSetOwner, WinDisplayToWindowPt, WinWindowToDisplayPt. + - In TapButton, call WinWindowToDisplayPt. + - In EmRPC, added support for Coord type. + +* Internal change: encapsulated all device-specific information in an + EmDevice class. This should make it easier to add new devices, + since all the information is now in one place. + +* Stack overflow checking is back (cf 2.1d27)! Whenever it looks + like something is assigning a value to the stack pointer register, + Poser marks the memory block that pointer is in as a stack. Then, + when the stack pointer is decremented for any reason, it is compared + to the low end of the memory chunk. If it falls below, Poser + displays a fatal error dialog. If the stack pointer is just getting + close without actually going over, Poser will display a warning. + +* Fixed another case of Gremlins going to sleep on the job. Gremlins + normally posts new random events when the system calls EvtGetEvent + and there's nothing to return, resulting in SysDoze being called. + Most of the times, Gremlins will post an event and return from + EvtGetEvent. In the cases it doesn't, it forces EvtGetEvent to + return a nil event. However, if Gremlins was posting a Shakespeare + quote to a form field, and the form field was full, and there was a + non-empty selection, there was a 33% chance that neither an event + would be posted nor a nil event returned. This resulted in the + application having nothing to do (and so SysDoze was called) and + Gremlins thinking its job was done for the moment and putting itself + into a "do nothing" state. [Scott Maxwell] + +* (Windows) When reloading a .psf file, fixed a bug that prevent the + Gremlin Control Window from being reshown if the session file had + been saved while a Gremlin was running. [Scott Maxwell] + +* (Windows) Fixed a problem with relocating the ROM file that a .psf + file reference when that ROM file wasn't where it was supposed to + be, but it *was* in the same directory as the .psf file. + +* (Unix) Rolled in modifications for FreeBSD. [John Ludwig] + +* (Unix) Properly recognise X options such as -display and -geometry. + [Eric House, John Marshall] + +* Reset the Dragonball timer registers to a consistant state before + starting a Gremlin. This gives more consistant results. HOWEVER, + any application that is dependent on the time in any fashion may + still have consistancy problems when running Gremlins (that is, + starting Gremlin #0 at 3:00pm may give different results than when + it is started at 5:00pm). This is an issue that we'll try to + address in a future release. + +* Switch from obsolete xxxChr names to new vchrXXX names in logging + output. Also, if a winExit/EnterEvent is associated with a form, + print the name of that form in the logging output if event logging + is turned on. + +* (Mac, Windows) Added Tracer support. This is a facility for + sending logging information to an external logging application. Palm + applications use the following API for doing this: + + (All HostTraceOutput functions take a module identifier as their + first parameter. This parameter allows filtering out traces + according to their origin. Recognized modules are listed as error + classes in SystemMgr.h. Application should specify appErrorClass.) + + void HostTraceInit(void); + Call once at the beginning of your application to + initialize the logging facility. Initiates a connection + to the "tracing port" (specified in Poser's Tracing + Options dialog box). + + void HostTraceClose(void); + Call once at the exit of your application to release + any host logging resources. + + void HostTraceOutputT(unsigned short, const char*, ...); + Log a string of text to the tracing port via a + "printf-like" facility. + + void HostTraceOutputTL(unsigned short, const char*, ...); + Same as HostTraceOutputT with an additional line break. + + void HostTraceOutputVT(unsigned short, const char*, char* /*va_list*/); + vprintf-like variant of HostTraceOutputT. + + void HostTraceOutputVTL(unsigned short, const char*, char* /*va_list*/); + vprintf-like variant of HostTraceOutputTL. + + void HostTraceOutputB(unsigned short, const unsigned char*, unsigned long/*size_t*/); + Send binary data to the tracing port. + + The functionality for sending the logging information to the + external application is provided by a shared library (e.g., + "PalmTrace.dll" on Windows). The external application can be any + application that supports the open packet convention. The one we + provide is "Reporter". At the time of this writing, the shared + library and external reporting application will be provided in a + seperate archive. [Patrick Porlan, Regis Nicolas] + +* Internal changes: massive movement to make more source code cross + platform. New classes include: + + EmTransport: abstract base class representing a "pipe" between two + entities. + + EmTransportSerial: a pipe based on serial communications. Serial + port emulation (the facility that allows Palm OS Serial Manager + calls to pass thru to and from the host serial port) rewritten to + use EmTransportSerial. + + EmHostTransportSerial: class with different implementations on + different platforms in order to provide platform specific + functionality. + + EmDlg: class to manage dialogs in a cross-platform fashion. + + EmROMTransfer: class that implements a rewritten ROM download + facility, based on the new EmTransport and EmDlg classes. Because + the new ROM transfer code is based on EmTransport and not + EmTransportSerial, this means that it may be possible to transfer a + ROM using something other than the serial port in the future. + +* With the help of the previous changes, the ROM Download facility is + now available on Unix. + +* Internal change: rewrote JPEG decompression routines to better + modularize the source of compressed data and the destination of + decompressed data. This was done to better support JPEG images on + disk in addition to those in embedded resources. + +* Added back the old generic case graphics. These graphics are now + used when the user selects "Default" in the Skins menu and dialog. + The nicer graphics are now identified with names like "Standard - + English" and "Standard - Japanese". Eventually, those nicer + graphics will be moved to external files, reducing the size of Poser + drastically and reducing download times. + +* Internal change: synced up with the latest shared Palm OS files. + This change also included switching over to the new standardized + types (UInt32, Int16, etc.) from the old hodgepodge of types (DWord, + Long, Int, Byte, etc.). + +* ROM Transfer now downloads the entire ROM instead of just the "Big + ROM". It now is also a little more robust in light of some invalid + fields in Visor ROMs. + +* (Windows) Added support for TRGpro devices. This support comes in + the form of supporting TRGnet's FAT File System library. There is + no TRGpro menu item in the device menu. Instead, you can + effectively turn any Palm Computing device into the equivalent of a + TRGnet device by installing their FFS library -- which is what + manages access to the CompactFlash slot -- onto the device. + (Actually, all it needs is a stub library that you can get from + TRGnet.) Poser will redirect calls from that library to the host + file system. The root of the emulated FFS directory hierarchy is + specified by the FfsHome preference in Poser's preference file. It + can be a path relative to Poser's directory (e.g., "foo") or an + absolute path (e.g., "c:\temp\foo"). The directory will be created + if needed. If no preference is specified, or the value is empty, or + the specified directory could not be created, the root path defaults + to Poser's directory. There is currently no UI for setting the root + of the hierarchy; you have to edit the preference file by hand. + [Mike Walter] + +* Added Visor support. Note that no USB support is provided in this + release. This means that Poser will not download a ROM from a + device in a USB-connected cradle, nor will USB operations on the + emulated Visor be redirected to any host facility. + +* Fixed problem with a too-small name buffer in profiling routines. + Removed absolute address from generated function names, as that + annotation interferes with the CodeWarrior Profiler's ability to + unmangle C++ names. [Catherine White] + +* (Windows) Removed "Close" menu item from "bound" versions of Poser + (functionality duplicates "Exit"), and added "Save Screen". [Scott + Johnson] + +* (Unix) Added temporary hack to get Unix menus working (many would + result in the message that the system was not responding). The + solution implemented, however, is not optimal, and may lead to other + problems. Expect this area to receive more attention in the near + future. [Eric House] + +* Added sound emulation. Be sure to enable this in the preferences + if you want it. [William F. Weiher III] + +* Fixed a couple of minor problems in the NetLib redirection code, + one with accept() and another with the way select() timeouts were + set up. [bill pitore] + +* Fixed a problem with determining the baud rate established by the + UART, with the result that serial communications on 20MHz devices + (like the Palm Vx) didn't work. [Alan Finke] + + +Changes for 3.0a3 (1999-11-13) +------------------------------ +* Added Q&D PC checking. On JSR, BSR, RTS, and RTE, I check what + we're attempting to set the PC to. Originally, I had a pretty beefy + check that made sure the PC was in things like allocated, locked + chunks. However, that's expensive for now, so I backed off to + checking that the PC was (a) even, (b) in RAM or ROM, and (c) not in + low-memory. + +* The new UAE 0.8.10 code includes a new way to emulate ROR and ROL + instructions. Unfortunately, this new way runs afoul of a code + generation bug in CWCPPC 2.3.1 (from CW 5.2) on the Mac. Reverted + to the old way of emulating those instructions until Metrowerks + comes out with a compiler patch. [Catherine White] + +* (Unix) Added tweaks for Debian systems. [Ben Darnell] + +* (Mac) Changed the way Poser determines whether or not to translate + extended ASCII characters (those >= 0x80) into standard ASCII + equivalents. The new method should be more consistant and robust, + based on whether or not the user is running a Japanese Palm OS and a + Mac OS with the Japanese Language Kit installed. + +* The device could actually go to sleep while running Gremlins! + Sometimes, Gremlins will input a long series of key events. + However, key events don't reset the auto-off counter. Normally, the + Palm doesn't care, since key events are a side-effect of pen events, + which *do* reset the auto-off counter. But Poser doesn't enter key + events that way -- it inserts them directly with EvtEnqueueKey. Now + Poser calls EvtResetAutoOffTimer when it enters key events. [Steve + Lemke] + +* (Windows) Sped up Gremlin Hordes a little. There were some long + delays while switching from one Gremlin to another due to trying to + access the Gremlin Control Window from the wrong thread. There's + still a mysterious 2 second delay while switching Gremlins, but at + least one cause of the slow-down is fixed. + +* Fixed problem with Gremlins and Palm OS 3.5 systems. Gremlins + calls WinGetWindowBounds to get the bounds of a window in which to + generate pen taps. WinGetWindowBounds returns the bounds of the + window returned by WinGetDrawWindow. On older systems, if the draw + window were NULL, WinGetDrawWindow would return the display window. + On 3.5, this has been changed in debug ROMs; WinGetDrawWindow can + return NULL so as to force applications to make sure there is an + established draw window. Gremlins ran afoul of that change, and so + now calls WinSetDrawWindow(WinGetActiveWindow()) before calling + WinGetWindowBounds(). [Roger Flores, Steve Lemke] + +* In the event posting/receiving logging code, support the new Palm + OS 3.5 events. + +* In HostFPrintF, support + and space as flags, and * as a minimum + width field character. [Patrick Porlan] + +* Added Symbol 1700/1740 skin as an option for Palm III's. This is + *not* to say that Poser emulates symbol devices. It only means that + you can make a Palm III look like a Symbol device. [Ron Kupke] + +* Reformatted Gremlin Hordes log file to make it a little easier to + find the error messages. [Flash Sheridan, Catherine White] + +* Make a stronger effort to get the pen calibrated perfectly. The + original attempt (cf, 2.1d11) would occassionally only get us very + close, which could lead to inconsistent Gremlin runs. + +* Fixed a bug in the UAE 0.8.10 code where a corrupt status register + could get pushed onto the stack during an exception/interrupt and + the previous instruction that had affected the Z CPU flag was a BCHG + instruction that flipped the highmost bit from off to on (gee, how + could we have missed *that*). [Catherine White, Stuart Malone] + + +Changes for 3.0a2 (1999-11-05) +------------------------------ +* Updated to UAE 0.8.10. We were previously based on 0.8.3. The new + version fixes a few minor bugs (I never noticed them), perhaps + speeds things up a little, but most importantly cleans up those 2000 + "unreferenced label" warnings you get when compiling with gcc! OK, + so now there are some "unused variable" warnings, but there are a + lot fewer of them... + +* (Windows) The sequence of events involving saving a session when + creating or opening a new one was completely broken. + +* (Windows) Added support from Palm Europe for their tracing tool. + This tracing tool is a seperate application that receives tracing + information sent via HostControl functions. The documentation for + these functions is not yet available. Neither is the external + application. But they soon will be. I just wanted to at least + mention them so that people don't ask me about them if they see the + new functions in HostControl.h. + +* (Unix) Modified Perl script that creates ResStrings.cpp. It used + to add the strings to a map object (so that they can be looked up by + an ID number) by calling a function with about 2000 calls that + looked like "map[id] = str;". However, gcc would choke on this with + optimizations turned on. Now, that map addition is performed in a + seperate function, and that function is called 2000 times instead. + [Ben Darnell, Jon Fo] + + +Changes for 3.0a1 (1999-11-04) +------------------------------ +* Interim internal release dates: + 2.1d29.1 - 1999-08-26 + 3.0a1e2 - 1999-09-14 + 3.0a1e3 - 1999-09-15 + 3.0a1e4 - 1999-09-16 + 3.0a1e5 - 1999-09-21 + 3.0a1e6 - 1999-09-24 + 3.0a1e7 - 1999-09-30 + 3.0a1e8 - 1999-10-08 + 3.0a1e9 - 1999-10-14 + 3.0a1e10 - 1999-10-19 + 3.0a1e11 - 1999-10-27 + +* Rolled in Llamagraphics's profiling changes [Catherine White]: + + The motivation for these changes was to fix the crashing problem we + reported earlier. Here's what we changed: + + - We rewrote RecursiveAddressToStrings without recursion, and + named the new function LinearAddressToStrings. The old function + was recursing over both kids and siblings, which was blowing the + stack on the Macintosh. Since it doesn't matter what order the + addresses are converted in, a linear loop is faster and simpler. + + - Called ProfilerCleanup at the end of ProfilerDump. Since + calls[i].address is modified during the dump, the calls array + can't be reused after the dump since it no longer contains valid + addresses. It seems safer to dispose of it so that it isn't used + accidentally. + + - Replaced the two Debugger() calls in ProfilerInit with calls to + DisposeMemory(). We were encountering these Debugger calls + while testing our own code, probably because ProfilerInit was + being called twice somehow. Calling ProfilerInit twice should + now be harmless, and should no longer leak memory. + + - Changed the handling of function names so that they are no + longer limited to 31 characters. The new limit is 255 + characters. This means that most mangled C++ names can now be + parsed properly by the MW Profiler, which makes interpreting the + profiles easier. + + In order to accomplish this, we needed to add extra arguments to + two routines in Miscellaneous.cpp for the buffer capacity. This + capacity defaults to 32, which means that callers who don't pass + in the extra argument will get the same behavior as before. + + We also added code in the profiler so that the stringTable could + grow dynamically. This means that it isn't so important to + allocate enough memory for the stringTable initially. However, + the initial size is currently the same as the old size was, so + reallocation shouldn't occur very often. + +* (Mac) Updated to CodeWarrior Pro 5. + +* Overhauled handling of preferences/properties/settings/options... + These settings were previously stored as resource-based binary data + on the Mac, System Registry entries on Window, and an RC text file + on Unix. Now the information is saved out as a text file on all + platforms. And -- with a common source code base -- all information + is saved out consistantly (some platforms previously skipped saving + some information). Finally, with all information in an accessible + text file format, it should be easier for users to tweak or fix + settings (or even specify settings for which there is no UI). + + Note that NO attempt has been made to migrate forward settings from + the previous formats. + +* In line with that, if the InterceptSysFatalAlert is true (default), + Poser will intercept calls to SysFatalAlert and display the message + in its own dialog box. If this setting is false, Poser will let the + standard Palm OS function display the message. [Ken Krugler, Scott + Johnson] + +* If a SysFatalAlert dialog is displayed while a Gremlin is running, + the Gremlin will no longer be halted if the user clicks on Continue + (it used to be that the Gremlin was *always* halted). [Roger Flores] + +* (Windows) Ask user if they'd like to have a shortcut to Poser added + to the Start Menu. [Phil Shoemaker] + +* Better validation of .prc files. [Daniel McCarthy] + +* (Windows) Cancel button in file download progress dialog now works. + +* (Windows) Fixed byteswapping bug in PSF writing code. Poser should + now have a better chance of reading Mac-created PSF files on Windows + and vice-versa. + +* Fixed memory leak bug that would occur when closing a session. The + buffers holding the ROM image and auxilliary information weren't + being deleted. [bullshark (a real person with a real email + address)]. + +* (Windows) Added the Palm OS Emulator Binding tool, an NT-only + wizard which can bind a Windows Poser executable with (1) a ROM file + and a device configuration, or (2) a ROM file and a session file. + This will create a self-contained executable suitable for "kiosk" + run. + + Poser detects when it is bound, and modifies its behavior in the + following manner: + + (1) ROM + device configuration. Poser always starts by booting + into a new session with the selected device configuration and + ROM. If the user closes the session and creates a new one, he or + she will not be prompted for a device configuration. + + (2) ROM + PSF file. Poser always starts right into the state + saved in the PSF file. The user interface is abbreviated to + include only pertinent functionality (no debugging or logging, + for example) that is appropriate to a "kiosk" run. IF the user + closes the session, he or she only has the option to restart it + in the state saved in the PSF file. Posers bound this way share + a separate set of preferences then unbound Posers. + +* Made the socket port that an external debugger can connect to + configurable. The old hard-coded port of 2000 is still support for + backward compatibility, but clients should move away from that. + Instead, they should use the port specified in the + "DebuggerSocketPort" preference. (There is currently no UI for + changing this preference. But it can be changed by hand by editting + the Poser preferences file, which is in text format.) + +* Added the following functions to HostControl.h: + + HostErr HostProfileDetailFn (void* addr, HostBool logDetails) + + Profiles the function containing the given address. If + logDetails is true, profiling is performed at a machine- + language instruction level (each opcode is treated as + its own function). + + HostErr HostGremlinNew (const HostGremlinInfo*); + + Start a new Gremlin using the given specifications. + + HostBool HostGetPreference (const char*, char*); + void HostSetPreference (const char*, const char*); + + Get or set the specified preference. Preferences are + identified by name, the set of which can be seen in the Palm + OS Emulator Preferences file for your platform ("Palm OS + Emulator Preferences" in the Preferences folder on the Mac, + "Palm OS Emulator Preferences.ini" in the Windows System + directory on Windows, and ".poserrc" in your home directory + on Unix). The values are also specified as strings, + examples of which can be seen in the preferences file. + + HostErr HostSessionCreate (const char* device, long ramSize, const char* romPath); + + Create a new session based on the given parameters. + Fails if a session is already running. + + * NOTE: Not yet implemented. + + HostErr HostSessionOpen (const char* psfFileName); + + Open the given session. Fails if a session is already + running. + + * NOTE: Not yet implemented. + + HostErr HostSessionClose (const char* saveFileName); + + Close the current session, saving it to the given file. + The session is not saved if no file name is specified. + This function fails if no session is running. + + HostErr HostSessionQuit (void); + + Ask Poser to quit. Fails if a session is already + running. + + HostErr HostSignalSend (HostSignal signalNumber) + + Send a signal (identified by an integer) to any scripts + with HostSignalWait calls pending. If there are such + pending calls, Poser then halts waiting to be restarted + with HostSignalResume. If no one was waiting for any + signals, then Poser doesn't halt. + + HostErr HostSignalWait (long timeout, HostSignal* signalNumber) + + Wait for a signal from Poser. Signals can be predefined + (hostSignalIdle, hostSignalQuit) or user-defined. + HostSignalWait returns the signalled value. + + hostSignalIdle is issued by Poser when it detects that it's + going into an idle state. + + hostSignalQuit is issued by Poser when it's about to quit. + + HostErr HostSignalResume (void) + + Restarts Poser after it has issued a signal. By waiting + to be restarted, Poser allows external scripts to perform + any other operations first. + + + While the following functions are in the HostControl API, + they exist for external RPC clients to call and will return + errors if called by Palm OS applications: + + HostSessionCreate + HostSessionOpen + HostSessionClose + HostSessionQuit + HostSignalWait + HostSignalResume + +* Opened a socket (on the port specified in "RPCSocketPort" + preference) for external applications to make RPC calls. By sending + RPC packets, external applications can invoke any function in the + Palm OS dispatch table. This set of functions includes the + HostControl functions, which can be called even when no session is + running (which normally would mean that there isn't really a + dispatch table containing functions that can be called). + + Packets sent to the RPC sub-system use the same format as packets + sent to the debugger sub-system, that is, the Serial Link Protocol + packet format (also used by HotSync). This format is described in + Debugging.html. + + When sending command packets to the RPC sub-system, you need to set + the "dest" field of the packet header to: + + #define slkSocketRPC (slkSocketFirstDynamic + 10) + + as opposed to slkSocketDebugger or slkSocketConsole, as you would + when talking with the debugger sub-system. + + The RPC sub-system can accept one of 4 kinds of command pacets: + ReadMem, WriteMem, RPC, and RPC2. The first three packets are the + same as those sent to the debugger sub-system and are defined in + Debugging.html. RPC2 is an extension of the RPC packet in order to + support a wider range of facilities. + + RPC2 packets are defined as follows: + + #define sysPktRPC2Cmd 0x20 + #define sysPktRPC2Rsp 0xA0 + + struct SysPktRPCParamInfo + { + UInt8 byRef; // true if param is by reference + UInt8 size; // # of Bytes of paramData (must be even) + UInt16 data[1]; // variable length array of paramData + }; + + struct SysPktRPC2Type + { + _sysPktBodyCommon; // Common Body header + UInt16 trapWord; // which trap to execute + UInt32 resultD0; // result from D0 placed here + UInt32 resultA0; // result from A0 placed here + UInt16 resultException; // If an exception occurred, it's ID is here + UInt8 DRegMask; // Bitmasks indicating what registers need... + UInt8 ARegMask; // ...to be set on this call. + UInt32 Regs[1]; // Variable-length array holding register... + // ...values to be set on this call. + UInt16 numParams; // how many parameters follow + + // Following is a variable length array of SlkRPCParamInfo's + SysPktRPCParamType param[1]; + }; + + Most of this is the same as the RPC packet. It differs with the + addition of the following fields: + + resultException: if the function call failed because a hardware + exception occurred, the exception ID will be stored here. Otherwise, + this field contains zero. + + DRegMask: a bitmask indicating what D registers need to be set in + order to make this call. In particular, some functions require that + a "selector" value be placed in register D2. In this case, bit 2 of + DRegMask (the 3rd bit from the right) would be set. + + ARegMask: same comments. + + Regs[1]: a variable length array containing the values to be placed + in the registers to be set. Only the registers that are being + changed need to be supplied. Most of the time, DRegMask and ARegMask + will be zero and Regs would not appear in the packet. In the example + where D2 needs to be set, DRegMask would be 0x04, ARegMask would be + 0x00, and ARegMask would be followed by a single 32-bit value to be + placed in D2. If more than one register needs to be set, then the + register values should appear in the following order: D0, D1, ..., + D6, D7, A0, A1, ..., A6, A7. Again, only values for the registers + specified in DRegMask and ARegMask need to be provided. + +* Fixed crasher that could occur if "Received Events" logging was + turned on and one of three KeyDown events was popped off the stack. + [Ken Krugler, Jeff Yasuda] + +* (Unix) Added serial port emulation, as well as better support for + other OS and compiler flavors. [Jerry Kirk, Michael Kedl] + +* (Unix) Added support for cursor, page up/down keys. [Michael Kedl] + +* (Unix) Fixed massive memory leak when sessions ended. [Michael Kedl] + +* More evolution of skin support. Skins are now set on a device-by- + device basis from a new "Skins..." dialog box. Other aspects of the + device's appearance are also set from this dialog box, such as the + scaling factor and the LCD background color. + +* Look at the chip selects when determining what range of RAM should + be protected or not instead of just assuming 128K. [Steve Lemke] + +* Fixed problems with reloading .psf files what were saved when a + Gremlin was running. + +* Fixed problem with white border in 2x mode. + +* Fixed problem with setting some color table entries. [Bob Ebert] + +* Fixed problem with HwrDisplayWake hanging on power-up. [David Fedor] + +* Setting "DebuggerSocketPort" or "RPCSocketPort" preferences to zero + will disable their respective facilities. This should be handy in + cases where merely opening a TCP socket fires up any sort of + unwanted Remote Access facilites. [Ken Krugler] + +* (Mac) Fixed bug in new preferences saving mechanism where the + preferences would not get saved if the file didn't already exist. + [Mike Puckett] + +* Allow LCD window to be placed in negative coordinates. [Mike Puckett] + +* Addition of Gremlin Hordes. A Horde is basically a range of + Gremlins to run. You specify the range: the first Gremlin and the + last Gremlin in the Horde. Poser will start with the first Gremlin, + and generate that Gremlins event stream until one of four things + happens: + + - An error occurs (hardware exception, illegal memory access, etc.), + - The maximum number of events have been generated, + - A "switch" event occurs. A switch event is when a specified number + of the maximum number of events have been generated. + + When any of these conditions occur, the current Gremlin is either + halted or suspended and the next Gremlin in the Horde is selected. + When Poser has cycled through all the Gremlins in the range, it + cycles back and restarts any suspended Gremlins one at a time. When + all Gremlins have been halted (either because they've encountered an + error or they've reached the maximum number of events), the Hordes + session is completed. + +* (Windows) Added the following command-line options [Brian Estes]: + + -skin : + Synonyn for -silkscreen. + + -ram_size : + Synonym for -ram. + + -load_apps : + A comma-seperated list of files (.prc's, etc.) to load after + startup. + + -run_app : + Application to run after startup. Note that this is the + name of the *application*, not the file. + + -quit_on_exit: + If -run_app was specified, quit when that application exits. + + -log_save_dir : + Location for standard log file. Default = Poser's directory. + + -horde : + Gremlin number to run after session is created or loaded. + Equivalent to setting -horde_first and -horde_last to the + same number. + + -horde_first : + First Gremlin in a Gremlin Horde to run. + + -horde_last : + Last Gremlin in a Gremlin Horde to run. + + -horde_apps : + A comma-seperated list of applications Gremlins is allowed + to switch to. Default == entire device (no restrictions). + + -horde_save_dir : + Location for directory that keeps saved session files and + logs. Default = Poser's directory. + + -horde_save_freq : + Gremlin snapshot save frequency. Default = don't save + snapshots. + + -horde_depth_max : + Total number of Gremlin events to generate for each Gremlin. + Default == no upper limit. + + -horde_depth_switch : + Number of Gremlin events to generate before switching to + another Gremlin in a Horde. Default == the same number + specified for -horde_depth_max. + +* (Windows) Added support for Alt-F4; made it act like the Exit menu + item. [Ryan Robertson] + +* Fixed a problem with profiling calls to Palm OS function made via + the SYSTRAP_FASTER macro. The function entry would be recorded once + because it was a system call, and then again because it was made via + a JSR. Because the subsequent RTS would pop only one of those off of + the profiler's stack, the stack would get out of sync and overflow. + [Jameson Quinn] + +* (Windows, Unix) Now stop the CPU thread on almost any UI action. + Previously, the CPU thread would be stopped only in targeted + situations. Now, it's stopped whenever the user executed a menu + command. This change was made when I found out that the profiling + menu items could mess up the CPU thread if it weren't stopped first. + +* Updated ROM Transfer project to CodeWarrior for Palm OS 5.2 (that + is, CodeWarrior for Palm OS Release 5 with Metrowerks' two updates + applied). + +* Fixed the way time spent in the trap dispatcher was recorded when + profiling; entries for the same function weren't necessarily being + collapsed into a single entry. [Bob Ebert] + +* (Unix) Added JPEG case graphics. + +* (Windows) Added taskbar menu with Minimize/Move/Close menu items. + Note that there may still be problems with minimizing/maximizing + Poser. For instance, Windows NT does not minimize windows without + caption bars when you select "Minimize All Windows". Windows 98 + will hide Poser when selection "Show Desktop", but will restore + Poser when restoring another application window. These problems + appear to be shortcomings of Windows, but if anyone knows how to + accomodate these foibles, please let me know. [Scott Johnson] + +* More accurate emulation of ROM space. Now the chip-selects are + used in conjuction with the ROM image file size. [Steve Lemke, + Jesse Donaldson] + + In general: + + The size of the ROM image is always rounded up to the next power of + two. + + On Dragonball devices, I assume that the chip-selects are always set + to specify a 2 Meg ROM (this appropriate for all ROMs so far). On + DragonballEZ devices, I look at csASelect, bits 1-3 (BTW, the reset + value for this register is 0x00E0, so there don't seem to be any + boot-up issues). + + If the rounded ROM image size is larger than the size specified by + the chip-selects, then it gets truncated; the CPU won't be able to + access the far end of it. + + If the rounded ROM image size is the same as the size specified by + the chip-selects, then everything is fine. No truncating, no + mirroring. + + If the rounded ROM image size is smaller than the size specified by + the chip-selects, then the ROM image is mirrored for as many times + as is necessary to cover the range. + +* (Mac) Added Power Manager code to keep PowerBooks awake when Poser + is doing something and when the PowerBook is plugged in. [Mike + Puckett] + +* Ensure that windows (LCD, Gremlin Control) are onscreen when + they're created. Right now, this means that they are brought + onscreen if any part of them is offscreen. If this is too strict, + we can revisit the algorithm later. + +* The code to validate the objects on a form has been moved from + Gremlins-specific code into a patch on FrmDrawFrom. Now people will + get bugged about invalid objects even when not running Gremlins. :-) + + By the way, some people have reported that they get told about + invalid or offscreen form objects, and that they think these reports + are in error, as the objects reported have ludicrous positions and + sizes and have object IDs that don't exist in the resource + description file. If you get such a message, *strongly* suspect + that your object list has been trashed, possibly due to the changing + of a label or title. Eventually, Poser will be able to detect when + form object lists get trashed at the moment it occurs, and not later + on down the stream (such as when the form gets drawn). + +* When dragging files onto the LCD screen, the rules are: you can + drag any number and assortment of .prc, .pdb, and .pqa files; you + can drag only one .rom file, you can drag only one .psf file; you + can't mix files from any of the three just-mentioned categories + together. If you broke any of these rules, you'd get an error + message. However, this error message was broken in different way on + Mac and Windows (the Unix version doesn't support D&D yet -- any + takers?). This was fixed by making the majority of the relevent + code cross-platform, and then fixing *that*. [Roger Flores, Mike + Turcotte] + +* (Mac) Fixed problem with Japanese text showing up as "Jinglish" on + systems with the Japanese Language Kit installed. This was always + supposed to be a feature in the New Gremlin dialog (so that you + could see the application names correctly), but appears to have been + broken for some time. That should be fixed, and the same facility + has now been extended to the dialog containing error messages + generated by the Palm OS. [Ken Krugler] + +* Fixed bug in NetLibGetHostByAddr where the address was assumed to be + a NetSocketAddrType instead of anything that could be "len" bytes + long. [Bill Pittore] + +* Turned on checking of writes to ROM. This was off for a reason + (there's a comment next to the relevent part saying "HACK: We really + want it to be true!"), but I don't remember what it is. I was able + to run Gremlins on some apps for quite a while without error, so + hopefully we can get away with turning this back on. [Scott Johnson] + +* Take another stab at fixing the problem with FntDefineFont, as first + described in the release notes for 2.1d20. FntDefineFont can read + off the end of a source buffer, causing Poser to report an invalid + read access to memory manager data structures. This bug -- fixed in + Palm OS 3.2 -- doesn't need to be alerted by Poser. [Scott Johnson] + +* If an application executes DbgBreak and no debugger is attached, + display a friendly message in a dialog box that includes Continue + and Reset buttons. [Ken Krugler] + +* Added Red Dutta's "Export Database" menu item. This command takes + the place of the "posedbexport" Palm OS application, allowing you + to export databases and applications from the emulator to your + desktop computer as a .pdb or .prc file. [Red Dutta] + +* Patch SysReset so that Poser no longer complains about normally + proscribed actions (like mucking with low-memory) during a reboot. + +* Bring us in-sync with the Simulator with regards to entering + control-chars that map to Palm OS command-chars. The list is: + + control-A menuChr + control-B lowBatteryChr + control-C commandChr + control-D confirmChr + control-E launchChr + control-F keyboardChr + control-M linefeedChr + control-N nextFieldChr + control-S autoOffChr + control-T hardContrastChr + control-U backlightChr + + B, S, T, and U are new in this release. + + +Changes for 2.1d29 (1999-07-08) +------------------------------- +* Interim internal release dates: + 2.1d28.1 - 1999-06-04 + 2.1d28.2 - 1999-06-04 + 2.1d28.3 - 1999-06-11 + 2.1d28.4 - 1999-06-11 + 2.1d28.5 - 1999-06-11 + 2.1d28.6 - 1999-06-15 + 2.1d28.7 - 1999-06-16 + 2.1d28.8 - 1999-06-23 + 2.1d28.9 - 1999-06-25 + 2.1d28.10 - 1999-06-30 + +* For temporary backward compatibility, "bare" file names on the + command lineare treated as paths to .psf files. [Andreas Linke, Mike + McCollister] + +* (Mac) Fixed problem with receiving Error #18 when trying to download + ROMs from actual devices over the serial port. [Mark Ordal] + +* In debugger/sockets communications, allow for recv() returning + zero, indicating a closed connection. + +* Fixed multi-threading bugs. [Andrew Ball, Daniel McCarty, Scott + Johnson, Keith Wolcott, Art Dahm, Mark Lussier, Alex Robinson, + Patrick Porlan] + +* (Unix) Fixed some makefile problems. [many] + +* (Mac, Windows): new case graphics. Note that the edges of the new + graphics are a little rough; we'll be working on that for the next + release. Also, the Mac version doesn't set up a custom palette in + 8-bit mode, yet, so for best results, you might want to put your + monitor in 16- or 24-bit modes. Finally, the Unix version will get + the new graphics in the next release. + +* Print some logging information using signed instead of unsigned + value. [Oliver King-Smith] + +* Don't go into infinite recursion when the emulated PC is set to an + odd memory address. [John Marshall] + +* Fixed problem in the "NetLib redirected" version of + NetLibSocketAccept where the address and address length were not + returned. [Bill Pitore] + +* (Windows) As outlined in the notes for 2.1d28, Poser will look for + the last-saved .psf file when starting up. It used to save the + reference to this file as a full pathname. Now, if the attempt + to locate the file with the full pathname fails, Poser will look + for a .psf file with the same name in the same directory as + Poser itself. This approach is similar to the way in which + Poser looks for .ROM files that are no longer at their last known + location. [Michael Hado] + +* Worked around VC++ 6.0 bug where tabbed dialogs in applications + built by it won't show up on systems without IE 4.x installed. + [Michael S. Davis] + +* (Unix) Fixed a minor bug in skin loading code which causes Emulator + to crash when it tries to load a skin file from current directory. + [Vlad] + +* Set the command key bit when Gremlins posts an up or down arrow. + + +Changes for 2.1d28 (1999-05-21) +------------------------------- +* Interim internal release dates: + 2.1d27.1 - 1999-05-17 + +* (Windows) Added command line options: + + -psf : emulator loads the specified .psf file on startup. + + -rom : specifies the ROM image file to use. + -ram : specifies the amount of RAM to emulate (in K). Valid sizes + are 128, 256, 512, 1024, 2048, 4096, and 8192. + -device : specifies the device to emulate. Valid types are pilot, + palmpilot, palmiii, palmiiix, palmv, palmvii, and palmiiic. + -silkscreen : specifies the silkscreen to use. Valid types are + english and japanese. + + Case is NOT significant. + + Examples: + + Emulator -psf C:\Data\Session.psf + + Emulator -ROM C:\ROMs\3.0\debug.rom -RAM 1024 -Device PalmIII + -Silkscreen English + + Startup rules are now as follows: + + 1 If the Caps Lock key is toggled in the ON position, always bring + up the New/Open/... dialog. + 2 Scan the command line for startup parameters. If an error occurs + trying to scan the command line, the error is reported and the user + is presented with the New/Open/... dialog. + 3 Use the .psf file if one is specified. If an error occurs trying + to load the file, the error is reported and the user is presented + with the New/Open/... dialog. + 4 If any of -rom, -ram, -device, or -silkscreen are specified, try + to start a new session based on those values. If all are specified, + the new session is automatically created. If any of those four + values are missing, the "New Configuration" dialog is displayed. + If the user cancels the dialog, or if there is an error creating + the new session, any error is reported and the user is presented + with the New/Open/... dialog. + 5 If no command line options are specified, try re-opening the last + saved .psf file (this step is skipped if the user last created a + new session, but did NOT save that session to a file). If an error + occurs trying to load the file, the error is reported and the user + is presented with the New/Open/... dialog. + 6 Try creating a new session based on the settings the user last + specified when creating a session. If there is an error creating + the new session, the error is reported and the user is presented + with the New/Open/... dialog. + 7 Finally, if all else fails, present the user with the New/Open/... + dialog. + + Steps 1, 5, 6, and 7 describe the old startup rules. Steps 2, 3, + and 4 are new. [Steve Haneman] + +* See that problem where I said that saving a session file could take + up to 15 seconds or even longer? And see where I said I didn't know + why? Well, it's because I'm an idiot. Under certain circumstances, + Poser could get into a state where it would save the same session + file several times in a row. Normally it would take a 1/2 second to + save a file. But if it decided to save the same file 30 times in a + row, that would take 15 seconds... + +* Fixed some more synchronization problems on SMP machines. + +* Force the Log####.txt files to be stored in the Poser directory + instead of whatever directory happens to be the current one. + + +Changes for 2.1d27 (1999-05-07) +------------------------------- +* Interim internal release dates: + 2.1d26.1 - ??? + 2.1d26.2 - ??? + 2.1d26.3 - ??? + 2.1d26.4 - 1999-03-25 + 2.1d26.5 - 1999-04-01 + 2.1d26.6 - ??? + 2.1d26.7 - ??? + 2.1d26.8 - 1999-04-27 + 2.1d26.9 - 1999-04-29 + 2.1d26.10 - 1999-05-05 + +* Added special messages for accessing NULL and for trying to access + the A5 register (in order to access global variables or make inter- + segment jumps) when A5 is not set up for the application trying to + use it. [Roger Flores, Ken Krugler] + +* Better tracking of the current application. Now, if errors occur + during an "action code" sequence, the application executing is + reported, not the "main", "real" application that has the stack, A5, + etc. [Roger Flores] + +* Fixed problem with installed Palm OS files and .psf files not + getting added to the MRU lists if the list was empty. [Scott + Johnson] + +* Fixed problem with MRU lists getting too long. [John Kinast] + +* In our SysUIAppSwitch patch, release any leftover command parameter + blocks (if any). [Catherine White] + +* Fixed problem with the Escape key used to wake up a sleeping device + also showing up in the event queue. [Daniel McCarty] + +* (Mac) Added support for Escape, F1-F4, page up/down. + +* Added special checks and error messages for SANE Math calling + sequences. [Steve Lemke] + +* Rolled in Adam's fixes to conditional breakpoints. [Adam Dingle] + +* Fixed problems with NetLibSocketAddr. [Adam Dingle] + +* Converted to VC++ 6.0. + +* Fixed problem with getting names of library routines in the + profiling system. [Adam Dingle] + +* Made Profile/Initialize implicit. [Adam Dingle] + +* Added explicit parent node information to profiling output text + file. [Adam Dingle] + +* Fixed problem with recursive routines recursing too deep in the + profile output functions. + +* The workaround for the old FindSaveFindStr bug didn't always work; + it would sometimes still let the bug emerge. Made a small tweak to + keep it suppressed. + +* Turned off stack overflow checking facility. It would occasionally + cause the emulator to walk the dynamic heap when the heap was in an + inconsistent state, resulting in spurious "...regular checkup..." + error messages. [The IBM guys: Paul Silagi, Chunk Bazil, Mike Nagy] + +* Added support for the contrast button on Palm Vs. The button is on + the right-hand side of the display graphic, opposite from the power + button. You can't see it, but clicking on it brings up the contrast + dialog. The dialog itself has no visual effect yet. [Ron Flax] + +* Breakpoints are now preserved across reboots. [Steve Lemke] + +* Totally rewrote the way (a) tailpatches and (b) soft breakpoints + are handled. Previously, Poser would get control by handling + special opcodes written into emulated memory: TRAP $D for + tailpatches and TRAP $0 for soft breakpoints. However, there were + problems with this approach. For one thing, what would happen if we + needed to write a TRAP $D and TRAP $0 to the same memory location. + You couldn't do it. There was no way, for example, to use + PalmDebugger to set a breakpoint just after a call to a system + function that Poser tailpatched. Also, Adam Dingle pointed out a + problem with the actual routines involved: on very rare occasions, + if an interrupt occurred just after one of those TRAP $Ds or TRAP $0s + were executed, then the next opcode executed would be the one that + originally resided at that location, an NOT the first opcode in the + interrupt routine. Anyway, this whole mess has been replaced with a + new mechanism that doesn't alter the emulated RAM or ROM. [Steve + Lemke, Adam Dingle and the IBM guys: Paul Silagi, Chunk Bazil, Mike + Nagy] + +* Sped up performance by 20%. But since the previous change slowed + things down by 13%, that's not as great as it first sounds. + +* Poser now ignores soft breakpoints (those installed by + PalmDebugger) it encounters when it calls into the ROM for it own, + nefarious, "between the cycles" purposes. [Steve Lemke] + +* Fixed problems trying to re-establish a sockets connection after + it's been broken when the external debugger quit. [Ron Marianetti] + +* When asked for a ROM, .psf, .prc, etc., file, set the initial + directory to the last directory used for that file type. + +* (Windows) Allow multiple .prc file selection in the Open File dialog. + +* ROMs with invalid header checksums now generate a non-fatal warning + instead of a fatal error. [Paul Dugas] + +* Allow for zero-length objects appearing at the end of .pdb files. + [Christopher Hunt] + +* Massive spring cleaning of sources. Now all major sub-systems have + a consistant interface for creating new sessions, resetting + sessions, saving sessions, loading sessions, and disposing of + sessions. Also, a lot of naming and scoping inconsistancies were + taken care of. Also, namespaces were forsaken in favor of classes + with static member functions; the CodeWarrior and VC++ browsers + didn't handle namespaces too well. + +* In line with the above, .psf files are now compressed, taking as + little as 15K for one that was normally 1 Meg. Note: the time it + takes to compress an image can vary wildly, sometimes being nearly + instantaneous, and sometimes taking upwards of 15 seconds. I'm not + sure why the difference occurs... + +* Also in line with the source code spring cleaning, the entire + emulator state is now saved to the session files. When loaded from + the session files, the entire emulator state is restored. This means + that you are returned right back to where you were when you created + the session file; you do not have to go through the process of + rebooting the "device". + +* Only heed the "Continue Past Warnings" option if a Gremlin is + actually running. [Scott Johnson] + +* Added support for the "dead battery" pin on Port D on EZ devices. + This should cut down the number of low-battery warnings on those + devices. [Jesse Donaldson] + +* Don't insert keyboard or mouse events if stopped in the debugger or + if the main emulator window is not active. + +* Added support for 4-bit LCD mode on EZ's. Found and fixed a long- + standing bug where the emulated copy of the LCD display might not + get updated if the lcdPageWidth register was updated. + +* If the emulated serial port was open and a reset occurred, close the + host serial port. + +* On the Mac, session files contain references to their associated + ROM files via aliases. On Windows, the references are stored as + full pathnames. This is old news. What's new is that if either of + these mechanisms fails to find the ROM file, Poser now looks first + in the same directory as the session file for a ROM file with the + same name, and if that fails looks in Poser's own directory for a + ROM file with the same name. + +* When reporting a corrupted heap, display also the address of the + chunk header. [Adam Dingle] + +* Implemented Part I of Gremlin Hordes: You can now periodically have + the complete emulator state saved while a Gremlin is running. This + state can be reloaded, and the Gremlin restarted. + + This feature is controlled via a new setting in the New Gremlin + dialog. There is now an editable item called Snapshot Frequency. + The number entered here is the number of events that should occur + between the time snapshots are taken. The default value is 10,000 + events. By setting this value to zero, you turn off the snapshot + feature. + + Snapshots are saved in a single directory in the Poser directory. + The name of the directory is "GremlinStates_####", where #### is a + value ensuring the directory name's uniqueness. + + Snapshots are saved in this directory with the name Event##########, + where ########## is the event number at which the snapshot was + taken. Snapshots are merely session files, so they can be reloaded + at any time, just like regular session files. + + Since snapshots are taken while a Gremlin is running, the Gremlin is + automatically turned off when the snapshot is reloaded. However, + Poser displays the Gremlin Control window when the snapshot is + loaded, allowing you to resume the Gremlin if you want. [Roger + Flores] + +* Fixed a bug in the Gremlins facility that validates forms and form + objects before trying to manipulate any of them. A call to + FrmGetObjectType would occassionally return garbage, leading the + rest of the function astray. [Scott Maxwell] + +* Added Unix release. [Ben Williamson, David Creemer] + +* Fixed serial port not working on EZ devices (a pin moved from port + F to port D during hardware development, and I missed it). [Florent + Pillet] + +* Don't validate form objects and their sizes on Palm OS 1.0 devices. + The built-in applications don't appear to follow the rules. [Andrew + Ball] + +* Rolled in Adam's conditional breakpoint enhancements. [Adam Dingle] + + "A register reference in a conditional breakpoint expression can + use either a direct (i.e. "d5") or indirect (e.g. "12(a6)") + addressing mode. Furthermore, a register expression can be + suffixed with either ".b", ".w" or ".l" to indicate that the + expression to be compared is either a byte, a word or a long. An + an example, "12(a6).w == 1000" compares the two bytes at memory + location (a6 + 12) to the value 1000. "d4.b == 100" compares the + low byte of the d4 register to the value 100. + + "I have found this enhancement to be extremely useful for breaking + into the debugger when a local variable (typically referenced off + the a6 register in code built by CodeWarrior) has a certain value." + +* (Windows) Fixed problem with running on dual-processor boxes. [TBD] + +* There is now a "white paper" on Poser usage at the following URL: + + + + +Changes for 2.1d26 (1999-02-26) +------------------------------- +* On the Mac, we were saving the device type to the .psf file twice. + On Windows, we weren't saving the country type at all. [Waddah + Kudaimi] + +* System call logging now also gets the names of library functions, + and attempts to make a better stab at "dispatch" system functions + (where a single dispatch code sub-dispatches to a suite of other + functions, as with the Floating Point Manager). [Ken Krugler] + +* Sped up debugger communications via sockets by 20x. [Ron Marianetti, + Mark Corry] + +* (Windows) Added conditional breakpoints. This is bolted on for now, + but should eventually be merged more seamlessly. Changes provided + by Adam Dingle of AvantGo. From Adam's release notes: + + New debugging features + + I've posted several messages recently to the palm-dev-forum mailing + list in which I've pointed out several limitations of the debugger + in CodeWarrior for PalmOS: it doesn't support data breakpoints + ("watchpoints") and its conditional breakpoint implementation is + very slow. To work around these limitations, I've added both data + breakpoints and fast conditional breakpoints to the 2.0b3 emulator. + + A data breakpoint allows you to monitor a range of memory addresses + for writes. When any code tries to write to the addresses you've + monitored, execution will immediately break into the debugger. This + can be extremely useful when you know that a certain data structure + is being corrupted somewhere in your program, but you don't know + where it is happening. + + To set a data breakpoint in the modified emulator, first launch the + emulator, then start the debugger in CodeWarrior. In the emulator, + choose the "Breakpoints" menu item. A dialog window will pop up; + select the "Enabled" check box, then enter a start address and a + number of bytes to monitor. The address and number of bytes may be + either hex ("0x89abc") or decimal ("12345"). As an example, if the + start address is 0x10000 and the number of bytes is 8, then any + write to addresses 0x10000 through 0x10007 will break into the + CodeWarrior debugger. + + Conditional breakpoints allow you to break when execution reaches a + given address, but only when a certain condition is true. + CodeWarrior for PalmOS supports conditional breakpoints, but its + implementation is so slow as to be practically useless. As I + pointed out in an earlier post to the palm-dev-forum list, in the + CodeWarrior debugger, each iteration past a conditional breakpoint + takes about 0.3 second, so you have to wait for an eternity if you + have to iterate hundreds or thousands of times until the break + condition is true (as is often the case in debugging). + + The modified emulator allows you to set conditional breakpoints with + virtually zero overhead. To set conditional breakpoints, first + launch the emulator, then start the CodeWarrior debugger. When you + are stopped in the debugger, choose the "Breakpoints" menu item in + the emulator. A dialog window will pop up which will allow you to + set up to 6 conditional breakpoints. To set a breakpoint, choose a + breakpoint slot and press the "Edit" button. A window will pop up + where you can enter an address and a condition. The address can be + either hex ("0x2468ace2") or decimal. Typically, you will determine + the address where you want to break by selecting the "mixed" view in + CodeWarrior to see a mix of source and assembly code. The condition + you specify must be of the form " ", + where + + is one of the 68000 registers D0...D7 or A0...A7 + is ==, !=, <, >, <=, or >=. (Important: for now, + all comparisons are UNSIGNED. This means that you can't use + a condition such as "D0 < 0", which will always be false). + is a hex or decimal constant + + By choosing the "mixed" view in CodeWarrior, you can see which 68000 + registers represent which local variables in your program, and so + you can construct an appropriate break condition involving a + register. + +* Exposed Palm IIIx and Palm V support. + +* Fixed problem with ROM Transfer on EZ devices. [Yoshiyuki Kubo] + +* Relaxed form-object-validation rules to allow for zero-sized + gadgets and tables. [Roger Flores] + +* Fixed bug in AutoRunAndQuit mechanism where Poser would quit when + a sub-launched application would quit, not when the application-of- + interest would quit. [Steve Haneman] + +* NetLibDmReceive should really work this time. [Doug Morrison] + + +Changes for 2.1d25 (1999-02-16) +------------------------------- +* Different method for checking whether or not a library function is + implemented. Poser still only checks known (i.e., Palm Computing) + libraries, but now instead of using a hardcoded table, it takes + advantage of the fact that the "open library" function appears right + after the dispatch table. [Tim Wiegman, Adam Hampson] + +* (Mac) Added WDEF project to Poser project. Changed the way the + outline region is calculated (should be more accurate now). + +* Added support for internal faster trap dispatching mechanism. The + major effect of this is that Poser can now support non-debug Palm + VII ROMs again. [Bob Ebert] + +* Added support for Autorun and AutorunAndQuit directories. These + directories are like the Autoload directory. Applications in + Autorun are loaded, and then one is chosen to be executed (by + convention chosen to be the last file in the directory). + Applications in AutorunAndQuit are loaded, and then one is chosen to + be executed in the same way. When that application quits, Poser + quits. If there are files in both Autorun and AutorunAndQuit, the + last file in AutorunAndQuit is chosen for execution. The files in + those directories can also contain launchable documents such as + .PQAs. [Steve Haneman] + +* (Windows) Centered the LCD. [Scott Johnson] + +* Better logging facilities. Here's what we've got so far: + + - Error Messages: undefined and unimplemented. + + - Warning Messages: If a dialog comes up that can be dismissed by + clicking on the Continue button, this option causes the message + to be logged. - Misc Gremlin Info: undefined. + + - Assembly Opcodes: unimplemented. Will eventually log assembly- + level trace information (registers, PC, opcodes, etc.) + + - Posted events: events entered into the system by calls to + EvtAddEventToQueue, EvtAddUniqueEventToQueue, + EvtEnqueuePenPoint, and EvtEnqueueKey. + + - Received events: events returned by EvtGetEvent, EvtGetPen, and + EvtGetSysEvent, + + - System calls: calls to Palm OS functions. + + - Application calls: unimplemented. Calls to functions in your own + application. In order for this to work, the name of the function + needs to be stored in memory following the function itself. + CodeWarrior supports this convention, gcc currently does not. + + - Serial Activity: serial port being opened and closed, changes in + serial port settings. + + - Serial Data: data being transmitted and sent. + + - NetLib Activity: calls to NetLib functions, parameter values and + return values. + + - NetLib Data: data being transmitted and sent. + + - ExgMgr Activity: unimplemented. You get the idea... + + - ExgMgr Data: You get the idea... + + - High-level Debugger Activity: messages received from an + external debugger and the replies sent back. + + - High-level Debugger data: details of the messages sent back and + forth. Not all packets currently display all their data when + this mode is turned on. + + - Low-Level Debugger Activity: trace of the low-level mechanisms + that receive raw data from external debuggers and the raw data + being sent back. + + - Low-Level Debugger Data: dumps of the raw data being sent back and + forth. + + These options are presented in a dialog box with two tabs: Normal + and Gremlins. The first tab contains options which are active + during normal emulator use. The second tab contains options which + are active when using Gremlins. + + Along with this new dialog, the Debug Options and New Gremlins + dialogs have also been changed. The logging checkboxes have been + removed from Debug Options (along with some currently unused + checkboxes). The logging checkboxes in the New Gremlins dialog have + been replaced with a "Logging Options..." button that brings up the + Logging Options dialog. A new checkbox ("Continue Past Warnings") + has been added to the New Gremlins dialog that controls what happens + when a non-fatal error dialog is displayed; if possible, these error + dialogs will automatically be dismissed if this option is checked. + + For performance reasons, all logged information is stored in an + internal memory buffer. Additionally, only the most recent + information is kept. After a certain threshhold, old information is + discarded. The amount of information kept is initially 1Meg, but + that can be changed by calling HostSetLogFileSize. + + The in-memory buffer is flushed on the following occassions: + + - The application quits. + - An error is displayed. + - A new Gremlin is started. + - An exception occurs. + + Logged data is written to a file named "Log####.txt", where #### is + a number ensuring the file name's uniqueness. + + Contents of the log file are of the form: + +