LLVM bus error on OSX Tiger

I have attempted to use both the 0.4 and 0.5 versions of
alchemy on my Macbook Pro laptop and get segfaults with both
versions when the LLVM tools ( i.e., llc ) attempt to run. Here is
a sample error message:
EXC_BAD_ACCESS (0x0001)
KERN_PROTECTION_FAILURE (0x0002) at 0x00000000
Thread 0 Crashed:
0 _malloc_initialize + 36
1 malloc + 29
Has anyone run into this before? I am able to set the tools
up successfully in Windows using boot camp, but this a suboptimal
solution at best. I have also tried replacing the crashing binaries
in alchemy with ones built from source from the LLVM site, but
while these do not crash, they do don't interoperate with alchemy
either.
Has anyone seen this before? Also, is there a source
distribution of alchemy that I can build and link locally? Is this
possibly an environment set up issue?
Thanks in advance.

Hey thanks for the info. I have not installed any LLVM libs,
I just downloaded version 2.1 and built it to try and substitute
the crashing alchemy binaries. This was kind of a desperate effort
anyway.
Is this crash expected behavior when running the alchemy
achacks utilities when the environment is not yet configured? For
example, would it be expected that the tools would segfault if you
download a fresh copy of alchemy and executed this:
> ~/Desktop/alchemy-darwin-v0.5a/bin/llc
Bus Error
>

Similar Messages

  • Hi, I want to downgrade from OSX LEOPARD to OSX TIGER but I have a few questions regarding this. My iMac is originally from 2007 it came preloaded with tiger. I have original install tiger discs version 10.4.10. Is it safe to downgrade or not please help

    Hi, I want to downgrade from OSX LEOPARD to OSX TIGER but I have a few questions regarding this. My iMac is originally from Sep 2007 it came preloaded with tiger. I have original install (2) tiger discs version 10.4.10.  I want to know if it is safe and what are the necessary steps to do so. Also by downgrading im wondering if a lot of apps nowadays support tiger for example I have photoshop version 5 and 4 these are very important to me. One last question does anyone know of any reliable virus protection for mac that doesnt slow down your computer? because I have read that a lot of them do so. If anyone can help me I would greatly appreciate it! Here are the specs for my iMac 
    Model Name:
    iMac
      Model Identifier:
    iMac7,1
      Processor Name:
    Intel Core 2 Duo
      Processor Speed:
    2 GHz
      Number Of Processors:
    1
      Total Number Of Cores:
    2
      L2 Cache:
    4 MB
      Memory:
    2 GB
      Bus Speed:
    800 MHz

    Most of the time a perception of general slow performance is the result of installing third party junk alleged to speed up, "clean" or "optimize" your Mac, or to look for viruses that don't exist. Ideally you would know what you installed so you can uninstall it, but if you don't know or aren't sure there are techniques such as Safe Mode and creating a temporary user account to confirm that suspicion.
    If you open Activity Monitor it may show a process, or processes, that occupy a lot of your system's time.
    Slowness confined solely to web browser activity is often the result of an inexorable progress toward websites that demand ever more processor-intensive tasks. If your slow performance is strictly limited to web browsing, you might try disabling Flash by either uninstalling it, or use utilities such as ClickToFlash that allow you to control what Flash content gets loaded. Flash in itself is not inherently evil, but there is nothing to stop websites or the advertisers who pay for them from writing horrible Flash code that can do everything from hogging 100% of your CPU's time to causing random crashes. You can watch Activity Monitor as in the above to correlate these troublesome web pages with performance degradation.
    You are correct; if your computer shipped with Tiger you may certainly revert to it. I forgot that Tiger was shipping on new Macs as recently as five years ago. To downgrade it would be necessary to completely erase your hard disk and boot with the Tiger installation DVD, followed by installing it anew. Such drastic measures are not necessary and you are unlikely to be satisfied with the results anyway.
    Assuming your system is free of third party parasitic junk attached to OS X in an ill-conceived attempt to improve upon it, that your hard disk drive is sound and the boot volume has enough free space to work with, by far the best performance-enhancing improvement would be to add more memory. Buy as much as your computer can use and that you can afford. 2 GB is not that much any more.
    Read the following for some recommended troubleshooting techniques from Apple:
    General purpose Mac troubleshooting guide: Isolating issues in Mac OS X
    Creating a temporary user to isolate user-specific problems: Isolating an issue by using another user account
    Memory limitations: Using Activity Monitor to read System Memory and determine how much RAM is being used
    Identifying resource hogs and other tips: Runaway applications can shorten battery runtime
    Starting the computer in "safe mode": Mac OS X: What is Safe Boot, Safe Mode?

  • Old Applications & files won't open in OSX-Tiger/Classic

    [post moved from other forum]
    I finished my Powerbook's hardware upgrade with success yesterday(with thanks to JPL, Sig, A_Brody and other's great advice). System is now Powerbook G3 400 Firewire with 512mbRam, new 40GB HDD, and OS-X Tiger. However...
    I can't seem to get the older Applications or their files to open. I get the error message:
    "There is no default application specified to open the document Appleworks 6"
    and/or
    "Could not be opened because the application that created it could not be found--- could not find a translation extension with appropriate translators"
    The upgrade/update procedure included...
    ===Back-up all files on the old 10GB HDD to an external USB drive.
    ===Remove old and replace w/new 40GB HDD, also install new 512MB PC-133 RAM module in lower slot.
    ===booted from old OS CD and ran Hard drive set-up utility with two partitions, one 30GB the other 10GB.
    ===Install OS 9.0.4 from that original Apple software CD onto the first 30GB partition.
    ===Onto same partition, ran OS-9 Update 9.1.0, then 9.2.1, then fireware update 4.1.8f5, then Update 9.2.1
    ===Installed OS-X Tiger onto the first 30GB partition
    ===Moved all backed-up files from the external USB drive onto the second 10GB partition.
    I have tried running the old applications in both OS-X Classic mode and also after changing the "Start-up Disk" to the smaller partition (which should be a clone of how the original Hard drive was set-up i.e. folder structure etc.)
    I'm quite surprised that when re-booting to the smaller partiton, that although it looks just like my system prior to upgrading, the apps don't run and the files don't open those older apps that created them. I assumed that the smaller Partition--and booting to it--would be the same as if the original Hard drive was still in the powerbook.
    When I get those error messages above, I have followed the "Choose Application" button thru to where I could choose the application. I follow to the "Applications (Mac OS 9" folder to where the actual APPLEWORKS 6 app (for exmaple) is located, but it is greyed out and can't be selected. BTW later I did copy all of the contents of the original "Applications" folder from the backed-up HDD into the OSX "Applications Mac OS 9" folder. Also note, the apps in that folder are listed as KIND "Unix Executable File". The files (in this case AppleWorks files) are also listed as that file KIND.
    ===In the OSX's System Preferences/System/Classic/Advanced tab, I have tried the REBUILD DESKTOP procedure--with no effected change. I know I read elsewhere in discussions that there was a procedure to re-boot with a certain keyboard held-key combo that allows to re-build desktop upon booting?? I don't remember the keyboard combo. And,not certain how that procedure is different.
    ===In the change Start-Up disc Utility, I now see four Systems to choose from...
    Mac OSX 10.4 on New 30GB HD
    Mac OS 9.2.2 on New 30GB HD
    Mac OS on Old 10GB HD (that's the smaller partition),
    Mac OS 9.2.2 on New 30GB HD
    Network Start-up
    Both the second and forth choice will boot-up to OS 9.2, but as mentioned the apps won't run and files won't open
    I'm guessing the reason the third choice won't boot (it reverts back to OSX Tiger when I try) is because that original System copy is OS 9.0.4 (backed-up prior to running the OS-9.1 and 9.2.1, 9.2.2 updates.). Also note, when in OS 9.2.2 when I go into that Utility... Apple/Control Panels/Startup Disk it doesn't list the old OS on the smaller partition. BTW could I now run/perform the OS-9 updates to bring that System on the smaller HD partition up to OS-9.2.2 with out causing problems (and maybe providing solutions?)
    I wonder...
    ??? Why would I be having to choose which application would open an application---wouldn't an app open on its own (Unix Executable File")
    ??? When I moved the orig HD back-ups on the external USB drive I noticed a file with some kind of PC icon was being created within the folder. Currently I see that the file is now displayed as FINDER.DAT. Does this file relate to the error that refers to "appropriate translators"? Could the Apple Macintosh files being backed-up onto an external USB drive that may not have been formated as Apple HFS type be causing a problem?
    ??? Why wouldn't the smaller 10GB partition with the old HDD back-up copy moved to it not function like the original Hard drive? Particularly when I choose to boot to its SYSTEM w/Start-up Disc? BTW when I choose that route, the powerbook just boots to OSX Tiger.
    THANKS for any replies, you all have been a great help with the challenges of upgrading...
    MSG-PWRBkG3
    PS:
    Sorry for the long post. But, I have included as much up-front details as possible to assist in your replies. I also want to help others reading this thread later on as to what (correct or incorrect) procedures were followed... to help them see how these in-compatibility scenerios would be similiar to their situations... leading to solutions for all.

    Thank you for including as much detail as you did. It makes it much easier to troubleshoot this type of issue. What I'll do is basically follow along with the procedure you used and point out where you (unknowingly) ran into problems.
    "Back-up all files on the old 10GB HDD to an external USB drive."
    Okay, I'm betting that this external USB drive was formatted as PC-Exchange/Windows format. Since this type of disk format doesn't have native support for the special "Mac" information about files (such as resource forks and HFS metadata like file type and creator codes), when Mac OS writes files to these disks, it needs to use a special method. When you copy the files from OS 9, OS 9 adds special "FINDER.DAT" files and also stores the resource-fork-parts of the original files inside a "RESOURCE.FRK" folder on the disk. My FAQ goes into more detail about this. When, from OS 9, you look at the files you just copied to the PC-formatted disk, and they appear identical to the files on your original 10 GB hard drive, that is in fact a complete illusion. The files as they exist on the PC-formatted disk are very different from what they appear. When you hook it up to your OS 9 Mac, the files appear fine, and you can copy them and have them work just like the original files did. If, on the other hand, you hook this PC-formatted hard drive up to your OS X Mac, it looks at the files in a completely different way. If you copy the files off of this disk from OS X, most of the files won't be usable.
    "Remove old and replace w/new 40GB HDD, also install new 512MB PC-133 RAM module in lower slot."
    "booted from old OS CD and ran Hard drive set-up utility with two partitions, one 30GB the other 10GB."
    "Install OS 9.0.4 from that original Apple software CD onto the first 30GB partition."
    "Onto same partition, ran OS-9 Update 9.1.0, then 9.2.1, then fireware update 4.1.8f5, then Update 9.2.1"
    "Installed OS-X Tiger onto the first 30GB partition"
    "Moved all backed-up files from the external USB drive onto the second 10GB partition."
    If you did this from OS X, you will run into problems, whereas if you do this from OS 9, you'll be okay. The reason for this, as I mentioned above, is that OS X doesn't know how to "see" the files in the same way that OS 9 does.
    This is what I would do. Make sure you still have the PC-formatted drive with the files you backed up from OS 9. Reboot into one of your versions of OS 9 that works properly. Hook up the external USB drive, and the files on it should appear properly and function properly. Now copy the files over onto your local hard drive and they should work properly as well. The files that you copied over from OS X won't be useful and can be deleted. Then reboot into OS X and you should be all set.
    Hope this helps....
    Dual 2.7 GHz PowerPC G5 w/ 2.5 GB RAM   Mac OS X (10.4.5)  

  • OSX Tiger wont install on iMac G5  17" (2006)

    hi all
    I am trying to update my bosses' iMac G5 from OSX 10.3 to OSX Tiger 10.4.7 and it's hanging up at restart up with Garbled error text. Some of the text appeared in Japanese. Is this a firmware or Apple hardware issue? My boss does have the installer Disk 1&2. What can it be?
    Thanks
    Jim

    Tiger install DVDs are in short supply. Tiger is no longer available at the Apple Store but is still available for $129 by calling Apple Phone Sales @ 1-800-MY-APPLE (1-800-692-7753). For other sources, do a Google search for MA453Z/A and M9639Z/A . Also look on eBay. Be sure & buy a retail version (black with silver X) and not a model specific version (gray).
    Also check this web store http://www.lacomputercompany.com/cgi-bin/rpcart/index.cgi?command=dispitem&type= sku&sku=19521
    Possible Alternative - OS X Tiger 10.4 Upgrade DVD $74.95
    http://www.yourmacstore.com/shop/shopexd.asp?id=376&bc=no
     Cheers, Tom

  • Bus error when trying to install os9.04

    I have ibook G3 with osx 10.2
    Bought ibook os9.04 disks but get a bus error. Tells me to restart holding shift down to turn off extensions. I do this however it still comes up with same thing bus error.
    Can't find classic os9 on my osx disks anywhere. I don't have restore disk only the original osx and os9.04
    Help

    If you are running Jaguar, you need to return the OS 9.04 discs & get your money back.
    You will need to purchase either OS 9.1 and/or OS 9.2.1 universal full install CDs.
    Make sure you check out all of the following links as prices vary for the OS 9.x cds.
    Ask the vendors the color of the CD lable. All universal full install CDs are white w/an orange/golden 9.x on it.
    http://store.yahoo.com/hardcoremac/index.html(RECOMMENDED BY APPLE)
    http://welovemacs.com/apsyso.html
    Do NOT buy a gray installation CD - those are not universal installers but model-specific [NO matter what the seller says about them!] OEM-versions have caused problems in the past when used on other computer models.
    See the following Knowledge Base Articles:
    http://docs.info.apple.com/article.html?artnum=106294
    http://docs.info.apple.com/article.html?artnum=106678

  • Force Reinstalling OSX Tiger

    My powerbook g4 titanium recently started booting up to a black screen on it saying I had a bad file descriptor. Since I have nothing that is extremely important on my hard drive how do I go about just forcing my powerbook to reinstall osx tiger from the error screen. I have the osx tiger disc so all I need to do is reinstall it and everything will be ok, right?
    Powerbook G4 Titanium   Mac OS X (10.4.8)   Broken

    Boot from the install disc, and open Disk Utility from the menu. If you really don't have anything on the main HD you want to save then reformat it. Then continue with the installation.

  • Various Error Messages on Tiger

    Hi, I use OS Tiger and I want to fix some irritating messages:
    1.) I tried to delete the trash and got this dialog window: The operation cannot be completed because the item "MacOSClassic" is in use. What should I do to delete the trash?
    2.) I tried to delete the trash and got this dialog window: The operation cannot be completed because the item "MacOS" is in use. What should I do to delete the trash?
    3.) Whenever I use "Disk Utility" - "First Aid" on OS Tiger the following window contains: the normal Hard Disks on your Mac and the following two items:
    "iDefrag-1.6.1.dmg" and "Yasu.dmg." What should I do to remove the two mentioned items above?

    I'm most appreciative of your assistance BDAqua. May be it came from another hard drive as you're suggesting.
    Well, let me tell the whole story: I have three(3)hard disks on my G4:
    1. Hard Disk(main drive): I run both MacOS 9.2.2 and OS X Tiger on it.
    2. 2nd Disk: I run MacOS 9.2.2 on it.
    3. 3rd Disk: I run OS X Tiger on it.
    Before the problem with OS X Tiger's Trash, I cleaned up the 2nd Disk and put the 2nd Disk's trash into the main Hard Disk/OS X Tiger Trash bin - to delete it there. That may be why the error messages on OSX Tiger keep coming up with "MacClassic" "MacOS" etc.
    I created a monster on my Main Drive. What should I do about it? I couldn't have ever guessed that emptying the trash could be so troublesome.
    Angel

  • Trouble Upgrading to OSX Tiger

    I've searched the forums but can't find an answer to my problem. I have a Power Mac G4 (tower). It was runing 9.? and I wanted to install Tiger onto it. The computer meets all of the system requirements but when I put the install disk in and clicked install, then restart, I get a blue screen...or a "you need to restart your computer" message. I went throug the trouble shooting (making sure there were no third party hardware installed...it's just like it was when it arrived from Apple...thowing away the fonts, etc.) I ran Norton Utilities and found no problems, then did something stupid, I erased the hard drive thinking I could start up from the OSX Tiger instal disk. But that was a mistake. So, I went back to my OS( install disk and reinstalled OS9. I did an erase install to make sure that the only things on the computer were OS9 things, no software, no additional stuff, etc.
    Now I restarted the computer, it's running on OS( just fine. I can access the internet, etc. But when I insert the OSX install disk, I get the same result...the apple icon with a spinning icon below it, then a blue screen with an arrow cursor...and nothing. I tired again and got the "you need to restart your computer" error. I cannot get Tiger installed. Can anyone help? (By the way it's a multiple lisence install disk, with 5 installs on it, and I've only used two (g5 powerbook laptop and new g5 imac.)
    I can be reached at [email protected] or [email protected]
    Thanks,
    Sean Riley

    Welcome to Apple Discussions!
    Norton is unsafe to use with Mac OS X.
    There is no such thing as a Powerbook G5.
    It sounds like you may have some hardware on your machine that does not jibe well with Mac OS X's installer. First make sure that the firmware is updated while you can boot the machine into Mac OS 9. To find out which PowerMac G4 you have see this article:
    http://docs.info.apple.com/article.html?artnum=58418
    And that will tell you from this article which firmware needs to be updated if any:
    http://docs.info.apple.com/article.html?artnum=86117
    If the firmware is updated, and you are erase and installing Tiger, and no third party peripherals, drives, or cards are in the tower and you are getting a four language screen (called a kernel panic) starting to boot from Mac OS X, then you might assume the hardware on your machine is damaged in some way. One of the most common four language you must restart causes is bad RAM. RAM may be good under Mac OS 9, but not work at all under Mac OS X. Make your you have at least 512 MB of RAM, and it is to system specifications.

  • What Itunes for OSX Tiger so that iphone4 can sync ?

    Hi everyone. Struggling with a simple problem.
    For my OSX Tiger machine, how do I get an itunes version for syncing with my iphone 4?I have itunes 6 (ancient, I know) but cant update to a later version.  Right now itunes doesnt even Know my iphone exists when I plug it in. Hopefully I don't need a new mac!
    I downloaded itunes 10.3.1 but could not get that running instead of my current itune6.Error message says I require OSX 10.5.
    Any help will be appreciated.
    J

    *Mac OS X 10.5 Leopard installation system requirements*
    http://support.apple.com/kb/TA24950
    Leopard is no longer available at the Apple Store *but may be available by calling Apple Phone Sales @ 1-800-MY-APPLE (1-800-692-7753)*.
    Installing Mac OS X 10.5 Leopard
    http://support.apple.com/kb/HT1544
    Mac OS X 10.5 Leopard Installation and Setup Guide
    http://manuals.info.apple.com/en/leopard_install-setup.pdf
    After you install the base 10.5, download & install the 10.5.8 combo update at http://support.apple.com/downloads/Mac_OS_X_10_5_8_Combo_Update
    You could also upgrade the OS to Snow Leopard 10.6 or possibly Lion 10.7.
     Cheers, Tom
    <img src="http://www.techsurvivors.net/forums/uploads/av-1642.jpg">

  • Help Installing OSX Tiger on iMac G4, seems HD Volume Structure corrupted

    I need help Installing OSX Tiger on an iMac G4 800MHz 17" Flat Screen LCD, 80 GB Hard Drive, 256MB RAM, DVD-R/CD-RW Super Drive, model# M8812LL/A. I have a Tiger install DVD and i put it in the drive and everything is fine....I go through the steps and when it gets to "Preparing the Disk" - "Verifying destination volume"....it just sits and nothing happens. It will go on for 20+ minutes or so and then the installer will quit saying there was errors during the update. Anyone got any idea what is happening? I'm running OSX 10.3 Panther currently. I just tried running Disk Utility using the install DVD.....it attempted three times and couldn't repair --- I then went out and purhased DiskWarrior --- I boot from that disk, it begins to run; then as it is repairing the volume it freezes and stays frozen for hours. I've rebooted and tried it numerous times with no luck. Is the HD no good? Should I just do a complete reinstall of Tiger and erase everything? I'd rather not, but I backed everthing up in case I need to. Also, when I ran TechTool Deluxe from the booted CD, it said the Volume Structure was corrupted. My Tiger disc is a retail full install disc that I purchased.
    Thanks for your help!!!

    Use Disk Utility to Restore to a FW drive.
    Use one of your FW drives, and create a 24GB partition - later you can reuse this for your emergency boot drive). Restore the DVD to FW volume. Boot from there to install with - very fast.
    Low level format is what you probably want/need and the only way to do that is ERASE with the option to ZERO-ALL (after you backup any files you don't now have on disk or DVD.... and where are the backups?).
    When you install it will also verify the DVD install disk itself.
    Have you tried using FSCK from the command line? Or do you no longer have a valid system on the boot drive? Nothing to lose it seems at this point from trying. Just hold down COMMAND + S on startup. At the prompt, follow direction to type:
    /sbin/fsck -fy

  • Bus error - Help!

    Hi,
    I've been asked to see if I can fix a C program so that it will run on a mac. It currently compiles and runs perfectly on a linux machine, but as soon as you run it on a mac, it will compile, but quit with a bus error very early on. The full code is here:
    // Program for the construction of cartograms (density-equalizing map
    // projections) using the Gastner-Newman technique. The program needs polygon
    // coordinates and a count of cases in each region as input, calculates the new
    // coordinates, and writes these to a file. Postscript images of the original
    // map and the cartogram are created.
    // WRITTEN BY MICHAEL GASTNER, September 20, 2004.
    // If you use output created by this program please acknowledge the use of this
    // code and its first publication in:
    // "Generating population density-equalizing maps", Michael T. Gastner and
    // M. E. J. Newman, Proceedings of the National Academy of Sciences of the
    // United States of America, vol. 101, pp. 7499-7504, 2004.
    // The input coordinates in MAPGENFILE must be in ArcInfo "generate" format of
    // the type:
    // 1
    // 0.3248690E+06 0.8558454E+06
    // 0.3248376E+06 0.8557575E+06
    // 0.3248171E+06 0.8556783E+06
    // 0.3247582E+06 0.8556348E+06
    // 0.3246944E+06 0.8555792E+06
    // 0.3246167E+06 0.8555253E+06
    // 0.3250221E+06 0.8557324E+06
    // 0.3249436E+06 0.8557322E+06
    // 0.3248690E+06 0.8558454E+06
    // END
    // 1
    // 0.3248690E+06 0.8558454E+06
    // 0.3249651E+06 0.8558901E+06
    // 0.3250519E+06 0.8559769E+06
    // 0.3250691E+06 0.8561246E+06
    // 0.3249678E+06 0.8560541E+06
    // 0.3249003E+06 0.8560088E+06
    // 0.3076424E+06 0.8477603E+06
    // 0.3075691E+06 0.8477461E+06
    // 0.3075595E+06 0.8476719E+06
    // END
    // 2
    // 0.6233591E+06 0.6056502E+06
    // 0.6235193E+06 0.6056467E+06
    // 0.6235054E+06 0.6055372E+06
    // 0.7384296E+06 0.2334260E+06
    // 0.7383532E+06 0.2345770E+06
    // END
    // END
    // The number of cases in CENSUSFILE must be given in the form
    // region #cases (optional comment), e. g:
    // 43 0.9 Alabama
    // 51 0.3 Alaska
    // 37 0.8 Arizona
    // 47 0.6 Arkansas
    // 25 5.4 California
    // 32 0.8 Colorado
    // 19 0.8 Connecticut
    // 29 0.3 Delaware
    // 28 0.3 District of Columbia
    // 49 2.5 Florida
    // 45 1.3 Georgia
    // 1 0.4 Hawaii
    // The output coordinates are written to CARTGENFILE in ArcInfo "generate"
    // format. A postscript image of the original input is prepared as MAP2PS,
    // an image of the cartogram as CART2PS.
    // Modified on Oct 29, 2004. The number of divisions in each dimension lx, ly
    // will now be determined from the input map. Also fixed array bound
    // violations in intpol and newt2, and centered the ps-files.
    // Modified on Dec 3, 2004. Introduced pointers bbmaxx,bbmaxy,bbminx,bbminy -
    // the bounding box coordinates for each polygon - to reduce calculations in
    // crnmbr. Thanks to Chris Brunsdon for the suggestion.
    // Program now terminates with error message if there is no density specified
    // in CENSUSFILE for a region on the map.
    // "Donut" polygons are now handled properly. Polygons oriented clockwise will
    // be considered exterior boundaries. If they are oriented anti-clockwise they
    // are holes inside an enclosing polygon. (Unconventional for mathematicians,
    // but this is ArcGIS standard.) The identifier is either that of the enclosing
    // polygon, or -99999 in which case it is a hole in the preceding polygon.
    // The population can now be a floating-point number.
    // If a region contains exactly zero population, it will be replaced by
    // MINPOPFAC times the smallest positive population in any region.
    // Obviously, MINPOPFAC should be <1, I will set it to 0.1 by default. This
    // should reduce the value of sigma necessary for the integrator to finish
    // properly.
    // Modified on March 31, 2005. Initialized maxchange in nonlinvoltra() as
    // INFTY. Replaced crnmbr() by a similar, but faster routine interior().
    // Many thanks to Stuart Anderson for pointing out this shortcut.
    // TO DO LIST:
    // - Do Gaussian blur within nonlinvoltra as a simple call to calcv and
    // eliminate gaussianblur().
    // - Modify the NR code for the FFTs to deal more naturally with the fencepost
    // issue. No more copying of arrays in sinft and cosft.
    // - Write truly two-dimensional versions of coscosft, cossinft, and sincosft.
    // See Chan and Ho: A new two-dimensional fast cosine transform algorithm,
    // IEEE Transactions on Signal Processing, 39, 481ff. (1991).
    // - Read polygon data directly from shapefile instead of generate file.
    // - Reorganize data structures. It is currently quite a mess to read.
    // Inclusions
    #include <math.h>
    #include <stdio.h>
    #include <stdlib.h>
    // Definitions
    #define CART2PS "./cart.ps","w" // Cartogram image.
    #define CARTGENFILE "./cartogram.gen" // Cartogram generate file.
    #define CENSUSFILE "./census.dat","r" // Input.
    #define CONVERGENCE 1e-100 // Convergence criterion for integrator.
    // #define DISPLFILE "./displ.dat","w"
    #define FALSE 0
    #define HINITIAL 1e-4 // Initial time step size in nonlinvoltra.
    #define IMAX 50 // Maximum number of iterations in Newton-Raphson routine.
    #define INFTY 1e100
    #define LINELENGTH 1000
    #define MAP2PS "map.ps","w" // Map image.
    #define MAPGENFILE "./map.gen","r" // Input coordinates.
    #define MAX(a,b) ((b>a)?(b):(a))
    #define MAXINTSTEPS 3000 // Maximum number of time steps in nonlinvoltra.
    #define MAXNSQLOG 18 // The number of sample points for rho_0 is <~2^MAXNSQLOG.
    #define MIN(a,b) ((b<a)?(b):(a))
    #define MINH 1e-5 // Smallest permitted time step in the integrator.
    #define MINPOPFAC 0.1 // Replace 0 population by a fraction of the minimum.
    #define NR_END 1
    #define NSUBDIV 1 // Number of linear subdivisions for digitizing the density.
    #define PADDING 1.5 // Determines space between map and boundary.
    #define PI 3.141592653589793
    #define SIGMA 0.1 // Initial width of Gaussian blur.
    #define SIGMAFAC 1.2 // Increase sigma by this factor. Must be > 1.
    #define SWAP(a,b) tempr=(a);(a)=(b);(b)=tempr;
    #define TIMELIMIT 1e8 // Maximum time allowed in integrator.
    #define TOLF 1e-3 // Sensitivity w. r. t. function value in newt2.
    #define TOLINT 1e-3 // Sensitivity of the integrator.
    #define TOLX 1e-3 // Sensitivity w. r. t. independent variables in newt2.
    #define TRUE !FALSE
    // Types
    typedef int BOOLEAN;
    typedef struct
    float x;
    float y;
    } POINT;
    // Globals
    float bbmaxx,*bbmaxy,*bbminx,*bbminy,**gridvx,*gridvy,maxx,maxy,minpop,
    minx,miny,polymaxx,polymaxy,polyminx,polyminy,*rho,**rho_0,**vx,**vy,*x,
    *xappr,xstepsize,**y,*yappr,ystepsize;
    int lx,ly,maxid,nblurs=0,npoly,npolycorn,*npolyinreg,nregcorn,nregion,
    polygonid,**polyinreg,*regionid,*regionidinv,*within;
    POINT *polycorn,*regcorn;
    // Function prototypes
    int readline(char line[],FILE *infile);
    void countpoly(FILE *infile);
    void countcorn(FILE *infile);
    void readcorn(FILE *infile);
    void makeregion(void);
    void pspicture(FILE *outfile);
    void bboxes(void);
    void interior(void);
    double regionarea(int ncrns,POINT *polygon);
    void digdens(void);
    void four1(float data[],unsigned long nn,int isign);
    void realft(float data[],unsigned long n,int isign);
    void cosft(float z[],unsigned long n,int isign);
    void sinft(float z[],unsigned long n,int isign);
    void coscosft(float **y,int isign1,int isign2);
    void cossinft(float **y,int isign1,int isign2);
    void sincosft(float **y,int isign1,int isign2);
    float **dmatrix(long nrl,long nrh,long ncl,long nch);
    float *d3tensor(long nrl, long nrh, long ncl, long nch, long ndl, long ndh);
    void free_matrix(float **m,long nrl,long nrh,long ncl,long nch);
    void free_f3tensor(float *t,long nrl,long nrh,long ncl,long nch,long ndl,
    long ndh);
    void fourn(float data[],unsigned long nn[],int ndim,int isign);
    void rlft3(float *data,float **speq,unsigned long nn1,unsigned long nn2,
    unsigned long nn3,int isign);
    void gaussianblur(void);
    void initcond(void);
    void calcv(float t);
    float intpol(float **arr,float x,float y);
    BOOLEAN newt2(float h,float *xappr,float xguess,float *yappr,float yguess,
    int j,int k);
    BOOLEAN nonlinvoltra(void);
    POINT transf(POINT p);
    void cartogram(void);
    // Function to read one line.
    int readline(char line[],FILE *infile)
    if (fgets(line,LINELENGTH,infile)==NULL) return 1;
    return 0;
    // Function to count the number of polygons.
    void countpoly(FILE *infile)
    char line[LINELENGTH];
    npoly = 0;
    while (!readline(line,infile)) if (line[0] == 'E') npoly++;
    npoly--; // The .gen file ends with two consecutive "END"s.
    // Function to count polygon corners. Also determines minimum/maximum x-/y-
    // coordinate.
    void countcorn(FILE *infile)
    BOOLEAN bnd_ok = FALSE;
    char line[LINELENGTH];
    float x,y;
    int polyctr=0,ratiolog;
    npolycorn = (int*)calloc(npoly,sizeof(int));
    polycorn = (POINT*)malloc(npoly*sizeof(POINT));
    readline(line,infile); // Skip first line.
    readline(line,infile);
    sscanf(line,"%f %f",&x,&y);
    polyminx = x; polymaxx = x; polyminy = y; polymaxy = y;
    npolycorn[0] = 1;
    while (!readline(line,infile))
    if (line[0] != 'E')
    sscanf(line,"%f %f",&x,&y);
    if (x < polyminx) polyminx = x;
    if (x > polymaxx) polymaxx = x;
    if (y < polyminy) polyminy = y;
    if (y > polymaxy) polymaxy = y;
    npolycorn[polyctr]++;
    else
    readline(line,infile);
    polycorn[polyctr] = (POINT)malloc(npolycorn[polyctr]sizeof(POINT));
    polyctr++;
    if (ceil(log((polymaxx-polyminx)/(polymaxy-polyminy))/log(2))+
    floor(log((polymaxx-polyminx)/(polymaxy-polyminy))/log(2))>
    2*log((polymaxx-polyminx)/(polymaxy-polyminy))/log(2))
    ratiolog = (int)floor(log((polymaxx-polyminx)/(polymaxy-polyminy))/log(2));
    else
    ratiolog = (int)ceil(log((polymaxx-polyminx)/(polymaxy-polyminy))/log(2));
    lx = (int)pow(2,(int)(0.5*(ratiolog+MAXNSQLOG)));
    ly = (int)pow(2,(int)(0.5*(MAXNSQLOG-ratiolog)));
    if ((polymaxx-polyminx)/lx > (polymaxy-polyminy)/ly)
    maxx = 0.5((1PADDING)*polymaxx(1-PADDING)polyminx);
    minx = 0.5((1-PADDING)*polymaxx(1PADDING)polyminx);
    maxy = 0.5(polymaxypolyminy(maxx-minx)ly/lx);
    miny = 0.5(polymaxy+polyminy-(maxx-minx)ly/lx);
    else
    maxy = 0.5((1PADDING)*polymaxy(1-PADDING)polyminy);
    miny = 0.5((1-PADDING)*polymaxy(1PADDING)polyminy);
    maxx = 0.5(polymaxxpolyminx(maxy-miny)lx/ly);
    minx = 0.5(polymaxx+polyminx-(maxy-miny)lx/ly);
    // Uncomment the next lines for interactive choice of boundary conditions.
    /* printf("For the %i polygon(s) under consideration:\n",npoly);
    printf("minimum x = %f\tmaximum x = %f\n",polyminx,polymaxx);
    printf("minimum y = %f\tmaximum y = %f\n",polyminy,polymaxy);
    while (!bnd_ok)
    printf("Type in your choice of boundaries.\nminx = ");
    scanf("%f",&minx);
    printf("maxx = ");
    scanf("%f",&maxx);
    printf("miny = ");
    scanf("%f",&miny);
    printf("maxy = ");
    scanf("%f",&maxy);
    if (minx>polyminx || maxx<polymaxx || miny>polyminy || maxy<polymaxy)
    printf("Invalid choice, does not enclose the polygon(s).\n");
    else bnd_ok = TRUE;
    // Function to read polygon corners. The first and last vertex of each polygon
    // must be identical.
    void readcorn(FILE *infile)
    char line[LINELENGTH];
    float xcoord,ycoord;
    int i,id,polyctr=0;
    polygonid = (int)malloc(npolysizeof(int));
    xstepsize = (maxx-minx)/lx;
    ystepsize = (maxy-miny)/ly;
    if (fabs((xstepsize/ystepsize)-1)>1e-3)
    fprintf(stderr,"WARNING: Area elements are not square: %f : %f\n",
    xstepsize,ystepsize);
    readline(line,infile);
    sscanf(line,"%i",&id);
    polygonid[polyctr] = id;
    i = 0;
    while (!readline(line,infile))
    if (line[0] != 'E')
    sscanf(line,"%f %f",&xcoord,&ycoord);
    polycorn[polyctr].x = (xcoord-minx)/xstepsize;
    polycorn[polyctr][i++].y = (ycoord-miny)/ystepsize;
    else
    // Is first and last vertex the same?
    if (fabs(polycorn[polyctr][0].x-
    polycorn[polyctr][npolycorn[polyctr]-1].x)+
    fabs(polycorn[polyctr][0].y-
    polycorn[polyctr][npolycorn[polyctr]-1].y)>1e-12)
    fprintf(stderr,
    "ERROR: %i-th polygon does not close upon itself.\n",
    polyctr+1);
    fprintf(stderr,"Identifier %i, first point %f %f.\n",
    polygonid[polyctr],polycorn[polyctr][0].x*xstepsize+minx,
    polycorn[polyctr][0].y*ystepsize+miny);
    exit(1);
    readline(line,infile);
    sscanf(line,"%i",&id);
    i = 0;
    polyctr++;
    if (polyctr<npoly) polygonid[polyctr] = id;
    polyminx = (polyminx-minx)/xstepsize;
    polyminy = (polyminy-miny)/ystepsize;
    polymaxx = (polymaxx-minx)/xstepsize;
    polymaxy = (polymaxy-miny)/ystepsize;
    // Function to make regions from polygons.
    void makeregion(void)
    BOOLEAN repeat;
    int i,lastid,minid,polyctr,ptctr,regctr;
    // Count the number of regions.
    nregion = 0;
    maxid = minid = polygonid[0];
    for (polyctr=0; polyctr<npoly; polyctr++)
    if (polygonid[polyctr] == -99999) continue;
    if (polygonid[polyctr]>maxid || polygonid[polyctr]<minid) nregion++;
    else
    repeat = FALSE;
    for (i=0; i<polyctr; i++)
    if (polygonid[polyctr]==polygonid)
    repeat = TRUE;
    break;
    if (!repeat) nregion++;
    if (polygonid[polyctr]>maxid) maxid = polygonid[polyctr];
    if (polygonid[polyctr]<minid) minid = polygonid[polyctr];
    if (minid < 0)
    fprintf(stderr,
    "ERROR: Negative region identifier %i.\n",minid);
    exit(1);
    // Match region identifiers.
    regionid = (int)malloc(nregionsizeof(int));
    nregion = 0;
    maxid = minid = polygonid[0];
    for (polyctr=0; polyctr<npoly; polyctr++)
    if (polygonid[polyctr] == -99999) continue;
    if (polygonid[polyctr]>maxid || polygonid[polyctr]<minid)
    regionid[nregion++] = polygonid[polyctr];
    else
    repeat = FALSE;
    for (i=0; i<polyctr; i++)
    if (polygonid[polyctr]==polygonid)
    repeat = TRUE;
    break;
    if (!repeat) regionid[nregion++] = polygonid[polyctr];
    if (polygonid[polyctr]>maxid) maxid = polygonid[polyctr];
    if (polygonid[polyctr]<minid) minid = polygonid[polyctr];
    regionidinv = (int)malloc((maxid+1)sizeof(int));
    // Negative number for unused identifiers.
    for (i=0; i<=maxid; i++) regionidinv = -1;
    for (regctr=0; regctr<nregion; regctr++)
    regionidinv[regionid[regctr]] = regctr;
    // Which polygons contribute to which regions?
    npolyinreg = (int*)calloc(nregion,sizeof(int));
    polyinreg = (int*)malloc(nregion*sizeof(int));
    lastid = polygonid[0];
    for (polyctr=0; polyctr<npoly; polyctr++)
    if (polygonid[polyctr] != -99999)
    npolyinreg[regionidinv[polygonid[polyctr]]]++;
    lastid = polygonid[polyctr];
    else npolyinreg[regionidinv[lastid]]++;
    for (regctr=0; regctr<nregion; regctr++)
    polyinreg[regctr] = (int)malloc(npolyinreg[regctr]sizeof(int));
    for (regctr=0; regctr<nregion; regctr++) npolyinreg[regctr] = 0;
    lastid = polygonid[0];
    for (polyctr=0; polyctr<npoly; polyctr++)
    if (polygonid[polyctr] != -99999)
    polyinreg[regionidinv[polygonid[polyctr]]]
    [npolyinreg[regionidinv[polygonid[polyctr]]]++] = polyctr;
    lastid = polygonid[polyctr];
    else polyinreg[regionidinv[lastid]][npolyinreg[regionidinv[lastid]]++]
    = polyctr;
    // Make regions from polygons. Start and end each polygon at (0,0).
    nregcorn = (int*)calloc(nregion,sizeof(int));
    regcorn = (POINT*)malloc(nregion*sizeof(POINT));
    for (regctr=0; regctr<nregion; regctr++)
    for (i=0; i<npolyinreg[regctr]; i++)
    nregcorn[regctr] += npolycorn[polyinreg[regctr]]+1;
    nregcorn[regctr]++;
    for (regctr=0; regctr<nregion; regctr++)
    regcorn[regctr] = (POINT)malloc(nregcorn[regctr]sizeof(POINT));
    ptctr = 0;
    regcorn[regctr][ptctr].x = regcorn[regctr][ptctr++].y = 0.0;
    for (polyctr=0; polyctr<npolyinreg[regctr]; polyctr++)
    for (i=0; i<npolycorn[polyinreg[regctr][polyctr]]; i++)
    regcorn[regctr][ptctr++] = polycorn[polyinreg[regctr][polyctr]];
    regcorn[regctr][ptctr].x = regcorn[regctr][ptctr++].y = 0.0;
    // Function to prepare a map in postscript standard letter format.
    void pspicture(FILE *outfile)
    char line[LINELENGTH];
    float addx,addy,b,conv,g,r;
    int ptctr,regctr;
    if (11*lx > 8.5*ly)
    conv = (float)8.5*72/lx;
    addx = 0;
    addy = 1136-8.5*36ly/lx;
    else
    conv = (float)11*72/ly;
    addx = 8.536-11*36lx/ly;
    addy = 0;
    fprintf(outfile,"0.5 setlinewidth\n");
    for (regctr=0; regctr<nregion; regctr++)
    fprintf(outfile,"newpath\n");
    fprintf(outfile,"%f %f moveto\n",
    regcorn[regctr][1].x*conv+addx,
    regcorn[regctr][1].y*conv+addy);
    for (ptctr=2; ptctr<nregcorn[regctr]; ptctr++)
    if (fabs(regcorn[regctr][ptctr].x)+
    fabs(regcorn[regctr][ptctr].y)>1e-12)
    fprintf(outfile,"%f %f lineto\n",
    regcorn[regctr][ptctr].x*conv+addx,
    regcorn[regctr][ptctr].y*conv+addy);
    else
    fprintf(outfile,"closepath\n");
    if (ptctr<nregcorn[regctr]-1)
    ptctr++;
    fprintf(outfile,"%f %f moveto\n",
    regcorn[regctr][ptctr].x*conv+addx,
    regcorn[regctr][ptctr].y*conv+addy);
    // Determine colors for map (without better knowledge I will do it
    // arbitrarily).
    if (regctr%3 == 0)
    r = (float)regctr/nregion;
    g = 1-(float)regctr/nregion;
    b = fabs(1-2*(float)regctr/nregion);
    else if (regctr%3 == 1)
    b = (float)regctr/nregion;
    r = 1-(float)regctr/nregion;
    g = fabs(1-2*(float)regctr/nregion);
    else
    g = (float)regctr/nregion;
    b = 1-(float)regctr/nregion;
    r = fabs(1-2*(float)regctr/nregion);
    fprintf(outfile,"%f %f %f setrgbcolor\ngsave\nfill\n",r,g,b);
    fprintf(outfile,"grestore\n0 setgray stroke\n");
    fprintf(outfile,"showpage\n");
    // Function to find the bounding box for each polygon.
    void bboxes(void)
    int i,j;
    float maxx, minx, maxy, miny;
    bbmaxx = (float)malloc(npolysizeof(float));
    bbmaxy = (float)malloc(npolysizeof(float));
    bbminx = (float)malloc(npolysizeof(float));
    bbminy = (float)malloc(npolysizeof(float));
    for (i = 0; i < npoly; i++)
    maxx = polycorn[0].x;
    maxy = polycorn[0].y;
    minx = maxx;
    miny = maxy;
    for (j = 0; j < npolycorn; j++)
    if (polycorn[j].x > maxx) maxx = polycorn[j].x;
    if (polycorn[j].x < minx) minx = polycorn[j].x;
    if (polycorn[j].y < miny) miny = polycorn[j].y;
    if (polycorn[j].y > maxy) maxy = polycorn[j].y;
    bbmaxx=maxx;
    bbmaxy=maxy;
    bbminx=minx;
    bbminy=miny;
    void interior(void)
    int i,inhowmanyregions,inregion[2],j,k,l,m,n,regctr;
    // Initialize within[][]. -1 means outside all regions.
    for (i=0; i<=lx; i++) for (j=0; j<=ly; j++) within[j] = -1;
    // Fill within[][].
    for (i=0; i<nregion; i++) for (j=0; j<npolyinreg; j++)
    for (k=0, n=npolycorn[polyinreg[j]]-1;
    k<npolycorn[polyinreg[j]]; n=k++)
    for (l=(int)ceil(MIN(polycorn[polyinreg[j]][k-1].y,
    polycorn[polyinreg[j]][k].y));
    l<MAX(polycorn[polyinreg[j]][k-1].y,
    polycorn[polyinreg[j]][k].y); l++)
    for (m=(int)floor(bbminx[polyinreg[j]]);
    m<(polycorn[polyinreg[j]][n].x-
    polycorn[polyinreg[j]][k].x)*
    (l-polycorn[polyinreg[j]][k].y)/
    (polycorn[polyinreg[j]][n].y-
    polycorn[polyinreg[j]][k].y)+
    polycorn[polyinreg[j]][k].x;
    m++)
    within[m][l] = i-within[m][l]-1;
    // Function to determine polygon area. This is needed to determine the average
    // population.
    // The problem in short is to find the area of a polygon whose vertices are
    // given. Recall Stokes' theorem in 3d for a vector field v:
    // integral[around closed curve dA]v(x,y,z).ds =
    // integral[over area A]curl(v).dA.
    // Now let v(x,y,z) = (0,Q(x,y),0) and dA = (0,0,dx*dy). Then
    // integral[around closed curve dA]Q(x,y)dy = integral[over area A]dQ/dxdxdy.
    // If Q = x:
    // A = integral[over area A]dx*dy = integral[around closed curve dA]x dy.
    // For every edge from (x,y) to (x[i1],y[i1]) there is a
    // parametrization
    // (x(t),y(t)) = ((1-t)xtx[i+1],(1-t)y+ty[i1]), 0<t<1
    // so that the path integral along this edge is
    // int[from 0 to 1]{(1-t)xt*x[i+1]}(y[i1]-y)dt =
    // 0.5(y[i1]-y)(x+x[i1]).
    // Summing over all edges yields:
    // Area = 0.5*[(x[0]+x[1])(y[1]-y[0]) + (x[1]+x[2])(y[2]-y[1]) + ...
    // ...(x[n-1]+x[n])(y[n]-y[n-1])+(x[n]x[0])(y[0]-y[n])]
    // ArcGIS treats a clockwise direction as positive, so there is a minus sign.
    double regionarea(int ncrns,POINT *polygon)
    double area=0;
    int i;
    for (i=0; i<ncrns-1; i++)
    area -=
    0.5(polygon.xpolygon[i+1].x)(polygon[i1].y-polygon.y);
    return area -= 0.5(polygon[ncrns-1].x+polygon[0].x)
    (polygon[0].y-polygon[ncrns-1].y);
    // Function to digitize density.
    void digdens(void)
    char line[LINELENGTH];
    double area,avgdens,*cases,dens,minpop=INFTY,ncases,totarea=0.0,totpop=0.0;
    FILE* infile;
    int i,id,ii,inhowmanyregions,inregion[2],j,jj,regctr;
    if ((infile=fopen(CENSUSFILE))==NULL)
    fprintf(stderr,"ERROR: Cannot find CENSUSFILE.\n");
    exit(1);
    // Find the minimum positive number of cases.
    while (!readline(line,infile))
    sscanf(line,"%i %lf",&id,&ncases);
    if (ncases<minpop && ncases>1e-12) minpop = ncases;
    fclose(infile);
    // Store the number of cases in an array.
    cases = (double)malloc(nregionsizeof(double));
    for (i=0; i<nregion; i++) cases = -1.0;
    infile = fopen(CENSUSFILE);
    while (!readline(line,infile))
    sscanf(line,"%i %lf",&id,&ncases);
    if (id>maxid || regionidinv[id]<0)
    fprintf(stderr,"ERROR: Identifier %i in CENSUSFILE does not\n",id);
    fprintf(stderr,"match any identifier in generate file.\n");
    exit(1);
    if (ncases>1e-12) totpop += (cases[regionidinv[id]] = ncases);
    else totpop += (cases[regionidinv[id]] = MINPOPFAC*minpop);
    for (regctr=0; regctr<nregion; regctr++) if (cases[regctr] < 0.0)
    fprintf(stderr,"ERROR: No density for region %i?\n",regionid[regctr]);
    fprintf(stderr,"cases = %f\n",cases[regctr]);
    exit(1);
    fclose(infile);
    // Calculate regions' areas, total area to be mapped, regional and average
    // densities.
    area = (double)malloc(nregionsizeof(double));
    for (regctr=0; regctr<nregion; regctr++)
    totarea += (area[regctr] = regionarea(nregcorn[regctr],regcorn[regctr]));
    dens = (double)malloc(nregionsizeof(double));
    for (regctr=0; regctr<nregion; regctr++)
    dens[regctr] = cases[regctr]/area[regctr];
    avgdens = totpop/totarea;
    // Digitize density.
    for (i=0; i<=lx; i++) for (j=0; j<=ly; j++) rho_0[j] = 0; // Initialize.
    printf("digitizing density ...\n");
    for (i=0; i<lx; i++) for (j=0; j<ly; j++)
    if (within[j]==-1) rho_0[j] = avgdens;
    else rho_0[j] = dens[within[j]];
    // Fill the edges correctly.
    rho_0[0][0] += rho_0[0][ly] + rho_0[lx][0] + rho_0[lx][ly];
    for (i=1; i<lx; i++) rho_0[0] += rho_0[ly];
    for (j=1; j<ly; j++) rho_0[0][j] += rho_0[lx][j];
    for (i=0; i<lx; i++) rho_0[ly] = rho_0[0];
    for (j=0; j<=ly; j++) rho_0[lx][j] = rho_0[0][j];
    // Replace rho_0 by Fourier transform
    coscosft(rho_0,1,1);
    free(area);
    free(cases);
    for (i=0; i<npoly; i++) free(polycorn);
    free(polycorn);
    for (i=0; i<nregion; i++) free(regcorn);
    free(regcorn);
    free(dens);
    free(npolycorn);
    free(nregcorn);
    free(polygonid);
    free(regionid);
    free(regionidinv);
    free(bbmaxx);
    free(bbmaxy);
    free(bbminx);
    free(bbminy);
    for (i=0; i<nregion; i++) free(polyinreg);
    free(polyinreg);
    free(npolyinreg);
    // Function to replace data[1...2*nn] by its discrete Fourier transform, if
    // isign is input as 1; or replaces data[1...2*nn] by nn times its inverse
    // discrete Fourier transform, if isign is input as -1. data is a complex array
    // of length nn or, equivalently, a real array of length 2*nn. nn MUST be an
    // integer power of 2 (this is not checked for!).
    // From "Numerical Recipes in C".
    void four1(float data[],unsigned long nn,int isign)
    double theta,wi,wpi,wpr,wr,wtemp;
    float tempi,tempr;
    unsigned long i,istep,j,m,mmax,n;
    n=nn<<1;
    j=1;
    for (i=1; i<n; i+=2)
    if (j>i)
    // This is the bit-reversal section of the routine.
    SWAP(data[j],data);
    SWAP(data[j1],data[i1]); // Exchange the two complex numbers.
    m=n>>1;
    while (m>=2 && j>m)
    j -= m;
    m>>=1;
    j += m;
    // Here begins the Danielson-Lanczos section of the routine.
    mmax=2;
    while (n>mmax) // Outer loop executed log_2 nn times.
    istep = mmax<<1;
    // Initialize the trigonometric recurrence.
    theta = isign*(6.28318530717959/mmax);
    wtemp = sin(0.5*theta);
    wpr = -2.0wtempwtemp;
    wpi = sin(theta);
    wr = 1.0;
    wi = 0.0;
    for (m=1; m<mmax; m+=2) // Here are the two nested inner loops.
    for (i=m; i<=n; i+=istep)
    j=i+mmax; // This is the Danielson-Lanczos formula
    tempr=wrdata[j]-widata[j+1];
    tempi=wrdata[j1]widata[j];
    data[j]=data-tempr;
    data[j1]=data[i1]-tempi;
    data += tempr;
    data[i+1] += tempi;
    wr = (wtemp=wr)wpr-wiwpi+wr; // Trigonometric recurrence.
    wi = wiwprwtempwpiwi;
    mmax=istep;
    // Function to calculate the Fourier Transform of a set of n real-valued data
    // points. It replaces this data (which is stored in array data[1...n]) by the
    // positive frequency half of its complex Fourier Transform. The real-valued
    // first and last components of the complex transform are returned as elements
    // data[1] and data[2] respectively. n must be a power of 2. This routine also
    // calculates the inverse transform of a complex data array if it is the
    // transform of real data. (Result in this case must be multiplied by 2/n).
    // From "Numerical Recipes in C".
    void realft(float data[],unsigned long n,int isign)
    double theta,wi,wpi,wpr,wr,wtemp;
    float c1=0.5,c2,h1i,h1r,h2i,h2r;
    unsigned long i,i1,i2,i3,i4,np3;
    theta = 3.141592653589793/(double) (n>>1); // Initialize the recurrence
    if (isign == 1)
    c2 = -0.5;
    four1(data,n>>1,1); // The forward transform is here.
    else // Otherwise set up for an inverse transform.
    c2 = 0.5;
    theta = -theta;
    wtemp = sin(0.5*theta);
    wpr = -2.0wtempwtemp;
    wpi = sin(theta);
    wr = 1.0+wpr;
    wi = wpi;
    np3 = n+3;
    for (i=2; i<=(n>>2); i++) // Case i=1 done separately below.
    i4 = 1(i3=np3-(i2=1+(i1=ii-1)));
    // The two separate transforms are separated out of data.
    h1r = c1*(data[i1]+data[i3]);
    h1i = c1*(data[i2]-data[i4]);
    h2r = -c2*(data[i2]+data[i4]);
    h2i = c2*(data[i1]-data[i3]);
    // Here they are recombined to form the true transform of the original
    // data.
    data[i1] = h1r+wrh2r-wih2i;
    data[i2] = h1iwrh2iwih2r;
    data[i3] = h1r-wrh2r+wih2i;
    data[i4] = -h1iwrh2iwih2r;
    wr = (wtemp=wr)wpr-wiwpi+wr; // The recurrence.
    wi = wiwprwtempwpiwi;
    if (isign == 1)
    data[1] = (h1r=data[1])+data[2]; // Squeeze the first and last data
    // together to get them all within the original array.
    data[2] = h1r-data[2];
    else
    data[1] = c1*((h1r=data[1])+data[2]);
    data[2] = c1*(h1r-data[2]);
    // This is the inverse transform for the case isign = -1.
    four1(data,n>>1,-1);
    // Function to calculate the cosine transform of a set z[0...n] of real-valued
    // data points. The transformed data replace the original data in array z. n
    // must be a power of 2. For forward transform set isign=1, for back transform
    // isign = -1. (Note: The factor 2/n has been taken care of.)
    // From "Numerical Recipes in C".
    void cosft(float z[],unsigned long n,int isign)
    double theta,wi=0.0,wpi,wpr,wr=1.0,wtemp;
    float *a,sum,y1,y2;
    int j,n2;
    // Numerical Recipes starts counting at 1 which is rather confusing. I will
    // count from 0.
    a = (float)malloc((n+2)sizeof(float));
    for (j=1; j<=n+1; j++) a[j] = z[j-1];
    // Here is the Numerical Recipes code.
    theta=PI/n; //Initialize the recurrence.
    wtemp = sin(0.5*theta);
    wpr = -2.0wtempwtemp;
    wpi = sin(theta);
    sum = 0.5*(a[1]-a[n+1]);
    a[1] = 0.5*(a[1]a[n1]);
    n2 = n+2;
    for (j=2; j<=(n>>1); j++)
    wr = (wtemp=wr)wpr-wiwpi+wr;
    wi = wiwprwtempwpiwi;
    y1 = 0.5*(a[j]+a[n2-j]);
    y2 = (a[j]-a[n2-j]);
    a[j] = y1-wi*y2;
    a[n2-j] = y1+wi*y2;
    sum += wr*y2;
    realft(a,n,1);
    a[n+1] = a[2];
    a[2] = sum;
    for (j=4; j<=n; j+=2)
    sum += a[j];
    a[j] = sum;
    // Finally I revert to my counting method.
    if (isign == 1) for (j=1; j<=n+1; j++) z[j-1] = a[j];
    else if (isign == -1) for (j=1; j<=n+1; j++) z[j-1] = 2.0*a[j]/n;
    free(a);
    // Function to calculate the sine transform of a set of n real-valued data
    // points stored in array z[0..n]. The number n must be a power of 2. On exit
    // z is replaced by its transform. For forward transform set isign=1, for back
    // transform isign = -1.
    void sinft(float z[],unsigned long n,int isign)
    double theta,wi=0.0,wpi,wpr,wr=1.0,wtemp;
    float *a,sum,y1,y2;
    int j;
    unsigned long n2=n+2;
    // See my comment about Numerical Recipe's counting above. Note that the last
    // component plays a completely passive role and does not need to be stored.
    a = (float*) malloc((n+1)*sizeof(float));
    for (j=1; j<=n; j++) a[j] = z[j-1];
    // Here is the Numerical Recipes code.
    theta = PI/(double)n; // Initialize the recurrence.
    wtemp = sin(0.5*theta);
    wpr = -2.0wtempwtemp;
    wpi = sin(theta);
    a[1] = 0.0;
    for (j=2; j<=(n>>1)+1; j++)
    // Calculate the sine for the auxiliary array.
    wr = (wtemp=wr)wpr-wiwpi+wr;
    // The cosine is needed to continue the recurrence.
    wi = wiwprwtempwpiwi;
    // Construct the auxiliary array.
    y1 = wi*(a[j]+a[n2-j]);
    y2 = 0.5*(a[j]-a[n2-j]);
    // Terms j and N-j are related.
    a[j] = y1+y2;
    a[n2-j] = y1-y2;
    // Transform the auxiliary array.
    realft(a,n,1);
    // Initialize the sum used for odd terms below.
    a[1] *= 0.5;
    sum = a[2] = 0.0;
    // Even terms determined directly. Odd terms determined by running sum.
    for (j=1; j<=n-1; j+=2)
    sum += a[j];
    a[j] = a[j+1];
    a[j+1] = sum;
    // Change the indices.
    if (isign == 1) for (j=1; j<=n; j++) z[j-1] = a[j];
    else if (isign == -1) for (j=1; j<=n; j++) z[j-1] = 2.0*a[j]/n;
    z[n] = 0.0;
    free(a);
    // Function to calculate a two-dimensional cosine Fourier transform. Forward/
    // backward transform in x: isign1 = +/-1, in y: isign2 = +/-1.
    void coscosft(float **y,int isign1,int isign2)
    float temp[lx+1];
    unsigned long i,j;
    for (i=0; i<=lx; i++)
    cosft(y,ly,isign2);
    for (j=0; j<=ly; j++)
    for (i=0; i<=lx; i++) temp=y[j];
    cosft(temp,lx,isign1);
    for (i=0; i<=lx; i++) y[j]=temp;
    // Function to calculate a cosine Fourier transform in x and a sine transform
    // in y. Forward/backward transform in x: isign1 = +/-1, in y: isign2 = +/-1.
    void cossinft(float **y,int isign1,int isign2)
    float temp[lx+1];
    unsigned long i,j;
    for (i=0; i<=lx; i++)
    sinft(y,ly,isign2);
    for (j=0; j<=ly; j++)
    for (i=0; i<=lx; i++) temp=y[j];
    cosft(temp,lx,isign1);
    for (i=0; i<=lx; i++) y[j]=temp;
    // Function to calculate a sine Fourier transform in x and a cosine transform
    // in y. Forward/backward transform in x: isign1 = +/-1, in y: isign2 = +/-1.
    void sincosft(float **y,int isign1,int isign2)
    float temp[lx+1];
    unsigned long i,j;
    for (i=0; i<=lx; i++)
    cosft(y,ly,isign2);
    for (j=0; j<=ly; j++)
    for (i=0; i<=lx; i++) temp=y[j];
    sinft(temp,lx,isign1);
    for (i=0; i<=lx; i++) y[j]=temp;
    // Function to allocate a float matrix with subscript range
    // m[nrl..nrh][ncl..nch]. From "Numerical Recipes in C".
    float **dmatrix(long nrl,long nrh,long ncl,long nch)
    long i, nrow=nrh-nrl1,ncol=nch-ncl1;
    float **m;
    /* allocate pointers to rows */
    m=(float **) malloc((unsigned int)((nrow+NR_END)sizeof(float)));
    if (!m)
    fprintf(stderr,"allocation failure 1 in matrix()\n");
    exit(1);
    m += NR_END;
    m -= nrl;
    /* allocate rows and set pointers to them */
    m[nrl]=(float *) malloc((unsigned int)((nrowncol+NR_END)sizeof(float)));
    if (!m[nrl])
    fprintf(stderr,"allocation failure 2 in matrix()\n");
    exit(1);
    m[nrl] += NR_END;
    m[nrl] -= ncl;
    for(i=nrl1;i<=nrh;i+) m=m[i-1]+ncol;
    /* return pointer to array of pointers to rows */
    return m;
    // Function to allocate a float 3tensor with range
    // t[nrl..nrh][ncl..nch][ndl..ndh]. From "Numerical Recipes in C".
    float *d3tensor(long nrl, long nrh, long ncl, long nch, long ndl, long ndh)
    long i,j,nrow=nrh-nrl1,ncol=nch-ncl+1,ndep=ndh-ndl1;
    float *t;
    /* allocate pointers to pointers to rows */
    t=(float *) malloc((sizet)((nrow+NREND)sizeof(float*)));
    if (!t)
    fprintf(stderr,"allocation failure 1 in f3tensor()\n");
    exit(1);
    t += NR_END;
    t -= nrl;
    /* allocate pointers to rows and set pointers to them */
    t[nrl]=(float **) malloc((sizet)((nrowncol+NREND)*sizeof(float)));
    if (!t[nrl])
    fprintf(stderr,"allocation failure 2 in f3tensor()\n");
    exit(1);
    t[nrl] += NR_END;
    t[nrl] -= ncl;
    /* allocate rows and set pointers to them */
    t[nrl][ncl]=(float *) malloc((sizet)((nrowncol*ndep+NREND)sizeof(float)));
    if (!t[nrl][ncl])
    fprintf(stderr,"allocation failure 3 in f3tensor()\n");
    exit(1);
    t[nrl][ncl] += NR_END;
    t[nrl][ncl] -= ndl;
    for(j=ncl1;j<=nch;j+) t[nrl][j]=t[nrl][j-1]+ndep;
    for(i=nrl1;i<=nrh;i+) {
    t=t[i-1]+ncol;
    t[ncl]=t[i-1][ncl]+ncol*ndep;
    for(j=ncl1;j<=nch;j+) t[j]=t[j-1]+ndep;
    /* return pointer to array of pointers to rows */
    return t;
    void free_matrix(float **m,long nrl,long nrh,long ncl,long nch)
    free((char*) (m[nrl]+ncl-1));
    free((char*) (m+nrl-1));
    void free_f3tensor(float *t,long nrl,long nrh,long ncl,long nch,long ndl,
    long ndh)
    free((char*) (t[nrl][ncl]+ndl-1));
    free((char*) (t[nrl]+ncl-1));
    free((char*) (t+nrl-1));
    // Function to replace data by its ndim-dimensional discrete Fourier transform,
    // if isign is input as 1. nn[1..ndim] is an integer array containing the
    // lengths of each dimension (number of complex values), which MUST be all
    // powers of 2. data is a real array of length twice the product of these
    // lengths, in which the data are stored as in a multidimensional complex
    // array: real and imaginary parts of each element are in consecutive
    // locations, and the rightmost index of the array increases most rapidly as
    // one proceeds along data. For a two-dimensional array, this is equivalent to
    // storing the arrays by rows. If isign is input as -1, data is replaced by its
    // inverse transform times the product of the lengths of all dimensions.
    void fourn(float data[],unsigned long nn[],int ndim,int isign)
    int idim;
    unsigned long i1,i2,i3,i2rev,i3rev,ip1,ip2,ip3,ifp1,ifp2;
    unsigned long ibit,k1,k2,n,nprev,nrem,ntot;
    double tempi,tempr;
    float theta,wi,wpi,wpr,wr,wtemp;
    for (ntot=1, idim=1; idim<=ndim; idim++)
    ntot *= nn[idim];
    nprev = 1;
    for (idim=ndim; idim>=1; idim--)
    n = nn[idim];
    nrem = ntot/(n*nprev);
    ip1=nprev << 1;
    ip2 = ip1*n;
    ip3 = ip2*nrem;
    i2rev = 1;
    for (i2=1; i2<=ip2; i2+=ip1)
    if (i2 < i2rev)
    for (i1=i2; i1<=i2+ip1-2; i1+=2)
    for (i3=i1; i3<=ip3; i3+=ip2)
    i3rev = i2rev+i3-i2;
    SWAP(data[i3],data[i3rev]);
    SWAP(data[i31],data[i3rev1]);
    ibit = ip2>>1;
    while (ibit>=ip1 && i2rev>ibit)
    i2rev -= ibit;
    ibit >>= 1;
    i2rev += ibit;
    ifp1 = ip1;
    while (ifp1 < ip2)
    ifp2 = ifp1 << 1;
    theta = 2isignPI/(ifp2/ip1);
    wtemp = sin(0.5*theta);
    wpr = -2.0wtempwtemp;
    wpi = sin(theta);
    wr = 1.0;
    wi = 0.0;
    for (i3=1; i3<=ifp1; i3+=ip1)
    for (i1=i3; i1<=i3+ip1-2; i1+=2)
    for (i2=i1; i2<=ip3; i2+=ifp2)
    k1 = i2;
    k2 = k1+ifp1;
    tempr = (float)wrdata[k2]-(float)widata[k2+1];
    tempi = (float)wrdata[k21](float)widata[k2];
    data[k2] = data[k1]-tempr;
    data[k2+1] = data[k1+1]-tempi;
    data[k1] += tempr;
    data[k1+1] += tempi;
    wr = (wtemp=wr)wpr-wiwpi+wr;
    wi = wiwprwtempwpiwi;
    ifp1 = ifp2;
    nprev *= n;
    // Function to calculate a three-dimensional Fourier transform of
    // data[1..nn1][1..nn2][1..nn3] (where nn1=1 for the case of a logically two-
    // dimensional array). This routine returns (for isign=1) the complex fast
    // Fourier transform as two complex arrays: On output, data contains the zero
    // and positive frequency values of the third frequency component, while
    // speq[1..nn1][1..2*nn2] contains the Nyquist critical frequency values of the
    // third frequency component. First (and second) frequency components are
    // stored for zero, positive, and negative frequencies, in standard wrap-around
    // order. See Numerical Recipes for description of how complex values are
    // arranged. For isign=-1, the inverse transform (times nn1nn2nn3/2 as a
    // constant multiplicative factor) is performed, with output data (viewed as
    // real array) deriving from input data (viewed as complex) and speq. For
    // inverse transforms on data not generated first by a forward transform, make
    // sure the complex input data array satisfies property 12.5.2 from NR. The
    // dimensions nn1, nn2, nn3 must always be integer powers of 2.
    void rlft3(float *data,float **speq,unsigned long nn1,unsigned long nn2,
    unsigned long nn3,int isign)
    double theta,wi,wpi,wpr,wr,wtemp;
    float c1,c2,h1r,h1i,h2r,h2i;
    unsigned long i1,i2,i3,j1,j2,j3,nn[4],ii3;
    if (1+&data[nn1][nn2][nn3]-&data[1][1][1] != nn1nn2nn3)
    fprintf(stderr,
    "rlft3: problem with dimensions or contiguity of data array\n");
    exit(1);
    c1 = 0.5;
    c2 = -0.5*isign;
    theta = 2isign(PI/nn3);
    wtemp = sin(0.5*theta);
    wpr = -2.0wtempwtemp;
    wpi = sin(theta);
    nn[1] = nn1;
    nn[2] = nn2;
    nn[3] = nn3 >> 1;
    // Case of forward transform. Here is where most all of the compute time is
    // spent. Extend data periodically into speq.
    if (isign == 1)
    fourn(&data[1][1][1]-1,nn,3,isign);
    for (i1=1; i1<=nn1; i1++)
    for (i2=1, j2=0; i2<=nn2; i2++)
    speq[i1][++j2] = data[i1][i2][1];
    speq[i1][++j2] = data[i1][i2][2];
    for (i1=1; i1<=nn1; i1++)
    // Zero frequency is its own reflection; otherwise locate corresponding
    // negative frequency in wrap-around order.
    j1 = (i1 != 1 ? nn1-i1+2 : 1);
    // Initialize trigonometric recurrence.
    wr = 1.0;
    wi = 0.0;
    for (ii3=1, i3=1; i3<=(nn3>>2)+1; i3+,ii3=2)
    for (i2=1; i2<=nn2; i2++)
    if (i3 == 1)
    j2 = (i2 != 1 ? ((nn2-i2)<<1)+3 : 1);
    h1r = c1*(data[i1][i2][1]+speq[j1][j2]);
    h1i = c1*(data[i1][i2][2]-speq[j1][j2+1]);
    h2i = c2*(data[i1][i2][1]-speq[j1][j2]);
    h2r = -c2*(data[i1][i2][2]speq[j1][j21]);
    data[i1][i2][1] = h1r+h2r;
    data[i1][i2][2] = h1i+h2i;
    speq[j1][j2] = h1r-h2r;
    speq[j1][j2+1] = h2i-h1i;
    else
    j2 = (i2 != 1 ? nn2-i2+2 : 1);
    j3 = nn3+3-(i3<<1);
    h1r = c1*(data[i1][i2][ii3]+data[j1][j2][j3]);
    h1i = c1*(data[i1][i2][ii31]-data[j1][j2][j31]);
    h2i = c2*(data[i1][i2][ii3]-data[j1][j2][j3]);
    h2r = -c2*(data[i1][i2][ii31]+data[j1][j2][j31]);
    data[i1][i2][ii3] = h1r+wrh2r-wih2i;
    data[i1][i2][ii3+1] = h1iwrh2iwih2r;
    data[j1][j2][j3] = h1r-wrh2r+wih2i;
    data[j1][j2][j3+1] = -h1iwrh2iwih2r;
    // Do the recurrence.
    wr = (wtemp=wr)wpr-wiwpi+wr;
    wi = wiwprwtempwpiwi;
    // Case of reverse transform.
    if (isign == -1)
    fourn(&data[1][1][1]-1,nn,3,isign);
    // Function to perform Gaussian blur.
    void gaussianblur(void)
    float **blur,***conv,***pop,**speqblur,**speqconv,*speqpop;
    int i,j,p,q;
    blur = d3tensor(1,1,1,lx,1,ly);
    conv = d3tensor(1,1,1,lx,1,ly);
    pop = d3tensor(1,1,1,lx,1,ly);
    speqblur = dmatrix(1,1,1,2*lx);
    speqconv = dmatrix(1,1,1,2*lx);
    speqpop = dmatrix(1,1,1,2*lx);
    // Fill population and convolution matrix.
    for (i=1; i<=lx; i++) for (j=1; j<=ly; j++)
    if (i > lx/2) p = i-1-lx;
    else p = i-1;
    if (j > ly/2) q = j-1-ly;
    else q = j-1;
    pop[1][j] = rho_0[i-1][j-1];
    conv[1][j] = 0.5*
    (erf((p+0.5)/(sqrt(2.0)(SIGMApow(SIGMAFAC,nblurs))))-
    erf((p-0.5)/(sqrt(2.0)(SIGMA*pow(SIGMAFAC,nblurs)))))
    (erf((q+0.5)/(sqrt(2.0)(SIGMApow(SIGMAFAC,nblurs))))-
    erf((q-0.5)/(sqrt(2.0)(SIGMA*pow(SIGMAFAC,nblurs)))))/(lxly);
    // Fourier transform.
    rlft3(pop,speqpop,1,lx,ly,1);
    rlft3(conv,speqconv,1,lx,ly,1);
    // Multiply pointwise.
    for (i=1; i<=lx; i++)
    for (j=1; j<=ly/2; j++)
    blur[1][2*j-1] =
    pop[1][2j-1]*conv[1][2j-1]-
    pop[1][2j]*conv[1][2j];
    blur[1][2*j] =
    pop[1][2j]*conv[1][2j-1]+
    pop[1][2j-1]*conv[1][2j];
    for (i=1; i<=lx; i++)
    speqblur[1][2*i-1] =
    speqpop[1][2i-1]*speqconv[1][2i-1]-
    speqpop[1][2i]*speqconv[1][2i];
    speqblur[1][2*i] =
    speqpop[1][2i]*speqconv[1][2i-1]+
    speqpop[1][2i-1]*speqconv[1][2i];
    // Backtransform.
    rlft3(blur,speqblur,1,lx,ly,-1);
    // Write to rho_0.
    for (i=1; i<=lx; i++) for (j=1; j<=ly; j++) rho_0[i-1][j-1] = blur[1][j];
    free_f3tensor(blur,1,1,1,lx,1,ly);
    free_f3tensor(conv,1,1,1,lx,1,ly);
    free_f3tensor(pop,1,1,1,lx,1,ly);
    free_matrix(speqblur,1,1,1,2*lx);
    free_matrix(speqconv,1,1,1,2*lx);
    free_matrix(speqpop,1,1,1,2*lx);
    // Function to initialize rho_0. The original density is blurred with width
    // SIGMA*pow(SIGMAFAC,nblurs).
    void initcond(void)
    float maxpop;
    int i,j;
    // Reconstruct population density.
    coscosft(rho_0,-1,-1);
    // There must not be negative densities.
    for (i=0; i<lx; i++) for (j=0; j<ly; j++) if (rho_0[j]<-1e10)
    fprintf(stderr,"ERROR: Negative density in DENSITYFILE.\n");
    exit(1);
    // Perform Gaussian blur.
    printf("Gaussian blur ...\n");
    gaussianblur();
    // Find the mimimum density. If it is very small suggest an increase in
    // SIGMA.
    minpop = rho_0[0][0];
    maxpop = rho_0[0][0];
    for (i=0; i<lx; i++) for (j=0; j<ly; j++) if (rho_0[j]<minpop)
    minpop = rho_0[j];
    for (i=0; i<lx; i++) for (j=0; j<ly; j++) if (rho_0[j]>maxpop)
    maxpop = rho_0[j];
    if (0<minpop && minpop<1e-8*maxpop)
    fprintf(stderr,"Minimimum population very small (%f). Integrator\n",
    minpop);
    fprintf(stderr,
    "will probably converge very slowly. You can speed up the\n");
    fprintf(stderr,"process by increasing SIGMA to a value > %f.\n",
    SIGMA*pow(SIGMAFAC,nblurs));
    // Replace rho_0 by cosine Fourier transform in both variables.
    coscosft(rho_0,1,1);
    // Function to calculate the velocity field
    void calcv(float t)
    int j,k;
    // Fill rho with Fourier coefficients.
    for (j=0; j<=lx; j++) for (k=0; k<=ly; k++)
    rho[j][k] = exp(-((PIj/lx)*(PI*j/lx)+(PI*k/ly)*(PI*k/ly))*t)rho_0[j][k];
    // Calculate the Fourier coefficients for the partial derivative of rho.
    // Store temporary results in arrays gridvx, gridvy.
    for (j=0; j<=lx; j++) for (k=0; k<=ly; k++)
    gridvx[j][k] = -(PIj/lx)rho[j][k];
    gridvy[j][k] = -(PIk/ly)rho[j][k];
    // Replace rho by cosine Fourier backtransform in both variables.
    coscosft(rho,-1,-1);
    // Replace vx by sine Fourier backtransform in the first and cosine Fourier
    // backtransform in the second variable.
    sincosft(gridvx,-1,-1);
    // Replace vy by cosine Fourier backtransform in the first and sine Fourier
    // backtransform in the second variable.
    cossinft(gridvy,-1,-1);
    // Calculate the velocity field.
    for (j=0; j<=lx; j++) for (k=0; k<=ly; k++)
    gridvx[j][k] = -gridvx[j][k]/rho[j][k];
    gridvy[j][k] = -gridvy[j][k]/rho[j][k];
    // Function to bilinearly interpolate a two-dimensional array. For higher
    // accuracy one could consider higher order interpolation schemes.
    float intpol(float **arr,float x,float y)
    int gaussx,gaussy;
    float deltax,deltay;
    // Decompose x and y into an integer part and a decimal.
    gaussx = (int)x;
    gaussy = (int)y;
    deltax = x-gaussx;
    deltay = y-gaussy;
    // Interpolate.
    if (gaussx==lx && gaussy==ly)
    return arr[gaussx][gaussy];
    if (gaussx==lx)
    return (1-deltay)arr[gaussx][gaussy]deltayarr[gaussx][gaussy1];
    if (gaussy==ly)
    return (1-deltax)arr[gaussx][gaussy]deltaxarr[gaussx1][gaussy];
    return (1-deltax)(1-deltay)arr[gaussx][gaussy]+
    (1-deltax)deltayarr[gaussx][gaussy1]
    deltax(1-deltay)arr[gaussx1][gaussy]
    deltaxdeltayarr[gaussx1][gaussy1];
    // Function to find the root of the system of equations
    // xappr-0.5h*v_x(t+h,xappr,yappr)-x[j][k]-0.5*hvx[j][k]=0,
    // yappr-0.5h*v_y(t+h,xappr,yappr)-y[j][k]-0.5*hvy[j][k]=0
    // with Newton-Raphson. Returns TRUE after sufficient convergence.
    BOOLEAN newt2(float h,float *xappr,float xguess,float *yappr,float yguess,
    int j,int k)
    float deltax,deltay,dfxdx,dfxdy,dfydx,dfydy,fx,fy;
    int gaussx,gaussxplus,gaussy,gaussyplus,i;
    // Initial guess.
    *xappr = xguess;
    *yappr = yguess;
    for (i=1; i<=IMAX; i++)
    // fx, fy are the left-hand sides of the two equations. Find
    // v_x(t+h,xappr,yappr), v_y(t+h,xappr,yappr) by interpolation.
    fx = xappr-0.5*h*intpol(gridvx,*xappr,*yappr)-x[j][k]-0.5*hvx[j][k];
    fy = yappr-0.5*h*intpol(gridvy,*xappr,*yappr)-y[j][k]-0.5*hvy[j][k];
    // Linearly approximate the partial derivatives of fx, fy with a finite
    // difference method. More elaborate techniques are possible, but this
    // quick and dirty method appears to work reasonably for our purpose.
    gaussx = (int)(*xappr);
    gaussy = (int)(*yappr);
    if (gaussx == lx) gaussxplus = 0;
    else gaussxplus = gaussx+1;
    if (gaussy == ly) gaussyplus = 0;
    else gaussyplus = gaussy+1;
    deltax = x[j][k] - gaussx;
    deltay = y[j][k] - gaussy;
    dfxdx = 1 - 0.5h
    ((1-deltay)*(gridvx[gaussxplus][gaussy]-gridvx[gaussx][gaussy])+
    deltay*(gridvx[gaussxplus][gaussyplus]-gridvx[gaussx][gaussyplus]));
    dfxdy = -0.5h
    ((1-deltax)*(gridvx[gaussx][gaussyplus]-gridvx[gaussx][gaussy])+
    deltax*(gridvx[gaussxplus][gaussyplus]-gridvx[gaussxplus][gaussy]));
    dfydx = -0.5h
    ((1-deltay)*(gridvy[gaussxplus][gaussy]-gridvy[gaussx][gaussy])+
    deltay*(gridvy[gaussxplus][gaussyplus]-gridvy[gaussx][gaussyplus]));
    dfydy = 1 - 0.5h
    ((1-deltax)*(gridvy[gaussx][gaussyplus]-gridvy[gaussx][gaussy])+
    deltax*(gridvy[gaussxplus][gaussyplus]-gridvy[gaussxplus][gaussy]));
    // If the current approximation is (xappr,yappr) for the zero of
    // (fx(x,y),fy(x,y)) and J is the Jacobian, then we can approximate (in
    // vector notation) for |delta|<<1:
    // f((xappr,yappr)+delta) = f(xappr,yappr)+J*delta.
    // Setting f((xappr,yappr)+delta)=0 we obtain a set of linear equations
    // for the correction delta which moves f closer to zero, namely
    // J*delta = -f.
    // The improved approximation is then x = xappr+delta.
    // The process will be iterated until convergence is reached.
    if ((fx*fx + fy*fy) < TOLF) return TRUE;
    deltax = (fy*dfxdy - fxdfydy)/(dfxdxdfydy - dfxdy*dfydx);
    deltay = (fx*dfydx - fydfxdx)/(dfxdxdfydy - dfxdy*dfydx);
    if ((deltax*deltax + deltay*deltay) < TOLX) return TRUE;
    *xappr += deltax;
    *yappr += deltay;
    //printf("deltax %f, deltay %f\n",deltax,deltay);
    fprintf(stderr,"newt2 failed, increasing sigma to %f.\n",
    SIGMA*pow(SIGMAFAC,nblurs));
    return FALSE;
    // Function to integrate the nonlinear Volterra equation. Returns TRUE after
    // the displacement field converged, after MAXINTSTEPS integration steps, or
    // if the time exceeds TIMELIMIT.
    BOOLEAN nonlinvoltra(void)
    BOOLEAN stepsize_ok;
    #ifdef DISPLFILE
    FILE *displfile = fopen(DISPLFILE);
    #endif
    float h,maxchange=INFTY,t,vxplus,vyplus,xguess,yguess;
    int i,j,k;
    do
    initcond();
    nblurs++;
    if (minpop<0.0)
    fprintf(stderr,
    "Minimum population negative, will increase sigma to %f\n",
    SIGMA*pow(SIGMAFAC,nblurs));
    while (minpop<0.0);
    h = HINITIAL;
    t = 0; // Start at time t=0.
    // (x[j][k],y[j][k]) is the position for the element that was at position
    // (j,k) at time t=0.
    for (j=0; j<=lx; j++) for (k=0; k<=ly; k++)
    x[j][k] = j;
    y[j][k] = k;
    calcv(0.0);
    // (gridvx[j][k],gridvy[j][k]) is the velocity at position (j,k).
    // (vx[j][k],vy[j][k]) is the velocity at position (x[j][k],y[j][k]).
    // At t=0 they are of course identical.
    for (j=0; j<=lx; j++) for (k=0; k<=ly; k++)
    vx[j][k] = gridvx[j][k];
    vy[j][k] = gridvy[j][k];
    i = 1; // i counts the integration steps.
    // Here is the integrator.
    do
    stepsize_ok = TRUE;
    calcv(t+h);
    for (j=0; j<=lx; j++) for (k=0; k<=ly; k++)
    // First take a naive integration step. The velocity at time t+h for
    // the element [j][k] is approximately
    // v(th,x[j][k]+hvx[j][k],y[j][k]hvy[j][k]).
    // The components, call them vxplus and vyplus, are interpolated from
    // gridvx and gridvy.
    vxplus = intpol(gridvx,x[j][k]hvx[j][k],y[j][k]hvy[j][k]);
    vyplus = intpol(gridvy,x[j][k]hvx[j][k],y[j][k]hvy[j][k]);
    // Based on (vx[j][k],vy[j][k]) and (vxplus,vyplus) we expect the
    // new position at time t+h to be:
    xguess = x[j][k] + 0.5h(vx[j][k]+vxplus);
    yguess = y[j][k] + 0.5h(vy[j][k]+vyplus);
    // Then we make a better approximation by solving the two nonlinear
    // equations:
    // xappr[j][k]-0.5hv_x(t+h,xappr[j][k],yappr[j][k])-
    // x[j][k]-0.5hvx[j][k]=0,
    // yappr[j][k]-0.5hv_y(t+h,xappr[j][k],yappr[j][k])-
    // y[j][k]-0.5hvy[j][k]=0
    // with Newton-Raphson and (xguess,yguess) as initial guess.
    // If newt2 fails to converge, exit nonlinvoltra.
    if (!newt2(h,&xappr[j][k],xguess,&yappr[j][k],yguess,j,k))
    return FALSE;
    // If the integration step was too large reduce the step size.
    if ((xguess-xappr[j][k])*(xguess-xappr[j][k])+
    (yguess-yappr[j][k])*(yguess-yappr[j][k]) > TOLINT)
    if (h<MINH)
    fprintf(stderr,
    "Time step below %f, increasing SIGMA to %f\n",
    h,SIGMA*pow(SIGMAFAC,nblurs));
    nblurs++;
    return FALSE;
    h /= 10;
    stepsize_ok = FALSE;
    break;
    if (!stepsize_ok) continue;
    else
    t += h;
    maxchange = 0.0; // Monitor the maximum change in positions.
    for (j=0; j<=lx; j++) for (k=0; k<=ly; k++)
    if ((x[j][k]-xappr[j][k])*(x[j][k]-xappr[j][k])+
    (y[j][k]-yappr[j][k])*(y[j][k]-yappr[j][k]) > maxchange)
    maxchange =
    (x[j][k]-xappr[j][k])*(x[j][k]-xappr[j][k])+
    (y[j][k]-yappr[j][k])*(y[j][k]-yappr[j][k]);
    x[j][k] = xappr[j][k];
    y[j][k] = yappr[j][k];
    vx[j][k] = intpol(gridvx,xappr[j][k],yappr[j][k]);
    vy[j][k] = intpol(gridvy,xappr[j][k],yappr[j][k]);
    h *= 1.2; // Make the next integration step larger.
    if (i%10==0) printf("time %f\n",t);
    i++;
    } while (i<MAXINTSTEPS && t<TIMELIMIT && maxchange>CONVERGENCE);
    if (maxchange>CONVERGENCE)
    fprintf(stderr,
    "WARNING: Insufficient convergence within %i steps, time %f.\n",
    MAXINTSTEPS,TIMELIMIT);
    #ifdef DISPLFILE
    // Write displacement field to file.
    fprintf(displfile,"time %f\nminx %f\nmaxx %f\nminy %f\nmaxy %f\n",
    t,minx,maxx,miny,maxy);
    fprintf(displfile,"sigma %f\n",SIGMA*pow(SIGMAFAC,nblurs-1));
    fprintf(displfile,"background %f\nlx\nly\n\n",0,lx,ly);
    for (j=0; j<=lx; j++) for (k=0; k<=ly; k++)
    fprintf(displfile,"j %i, k %i, x %f, y %f\n",j,k,x[j][k],y[j][k]);
    fclose(displfile);
    #endif
    return TRUE;
    // Function to transform points according to displacement field.
    POINT transf(POINT p)
    float deltax,deltay,den,t,u;
    int gaussx,gaussy;
    POINT a,b,c,d,ptr;
    p.x = (p.x-minx)*lx/(maxx-minx);
    p.y = (p.y-miny)*ly/(maxy-miny);
    gaussx = (int)p.x;
    gaussy = (int)p.y;
    if (gaussx<0 || gaussx>lx || gaussy<0 || gaussy>ly)
    fprintf(stderr,"ERROR: Coordinate limits exceeded in transf.\n");
    exit(1);
    deltax = p.x - gaussx;
    deltay = p.y - gaussy;
    // The transformed point is the intersection of the lines:
    // (I) connecting
    // (1-deltax)(x,y[gaussx][gaussy])deltax(x,y[gaussx1][gaussy])
    // and
    // (1-deltax)(x,y[gaussx][gaussy1])+deltax(x,y[gaussx+1][gaussy1])
    // (II) connecting
    // (1-deltay)(x,y[gaussx][gaussy])deltay(x,y[gaussx][gaussy1])
    // and
    // (1-deltay)(x,y[gaussx1][gaussy])+deltay(x,y[gaussx+1][gaussy1]).
    // Call these four points a, b, c and d.
    a.x = (1-deltax)*x[gaussx][gaussy] + deltax*x[gaussx+1][gaussy];
    a.y = (1-deltax)*y[gaussx][gaussy] + deltax*y[gaussx+1][gaussy];
    b.x = (1-deltax)*x[gaussx][gaussy+1] + deltax*x[gaussx1][gaussy1];
    b.y = (1-deltax)*y[gaussx][gaussy+1] + deltax*y[gaussx1][gaussy1];
    c.x = (1-deltay)*x[gaussx][gaussy] + deltay*x[gaussx][gaussy+1];
    c.y = (1-deltay)*y[gaussx][gaussy] + deltay*y[gaussx][gaussy+1];
    d.x = (1-deltay)*x[gaussx+1][gaussy] + deltay*x[gaussx1][gaussy1];
    d.y = (1-deltay)*y[gaussx+1][gaussy] + deltay*y[gaussx1][gaussy1];
    // Solve the vector equation a+t(b-a) = c+u(d-c) for the scalars t, u.
    if (fabs(den=(b.x-a.x)(c.y-d.y)+(a.y-b.y)(c.x-d.x))<1e-12)
    fprintf(stderr,"ERROR: Transformed area element has parallel edges.\n");
    exit(1);
    t = ((c.x-a.x)(c.y-d.y)+(a.y-c.y)(c.x-d.x))/den;
    u = ((b.x-a.x)(c.y-a.y)+(a.y-b.y)(c.x-a.x))/den;
    if (t<-1e-3|| t>1+1e-3 || u<-1e-3 || u>1+1e-3)
    fprintf(stderr,"WARNING: Transformed area element non-convex.\n");
    ptr.x = (1-(a.x+t(b.x-a.x))/lx)minx + ((a.x+t(b.x-a.x))/lx)maxx;
    ptr.y = (1-(a.y+t(b.y-a.y))/ly)miny + ((a.y+t(b.y-a.y))/ly)maxy;
    return ptr;
    // Function to read spatial features from user-specified file and map to
    // cartogram.
    void cartogram(void)
    char id[LINELENGTH],line[LINELENGTH];
    FILE infile,outfile;
    float xcoord,ycoord;
    POINT p;
    infile = fopen(MAPGENFILE);
    outfile = fopen(CARTGENFILE,"w");
    while (!readline(line,infile))
    if (sscanf(line,"%s %f %f",&id,&xcoord,&ycoord)==3)
    p.x = xcoord;
    p.y = ycoord;
    p = transf(p);
    fprintf(outfile,"%s %f %f\n",id,p.x,p.y);
    else if (sscanf(line,"%f %f",&xcoord,&ycoord)==2)
    p.x = xcoord;
    p.y = ycoord;
    p = transf(p);
    fprintf(outfile,"%f %f\n",p.x,p.y);
    else
    sscanf(line,"%s",&id);
    fprintf(outfile,"%s\n",id);
    fclose(infile);
    fclose(outfile);
    main(void)
    BOOLEAN n;
    char c;
    FILE genfile,psfile = fopen(MAP2PS);
    float oldlx,oldly,oldmaxx,oldmaxy,oldminx,oldminy,totarea;
    int i,polyctr,regctr;
    // Read the polygon coordinates.
    if ((genfile = fopen(MAPGENFILE)) == NULL)
    fprintf(stderr,"ERROR: Cannot find MAPGENFILE\n");
    exit(1);
    countpoly(genfile);
    fclose(genfile);
    genfile = fopen(MAPGENFILE);
    countcorn(genfile);
    fclose(genfile);
    genfile = fopen(MAPGENFILE);
    readcorn(genfile);
    fclose(genfile);
    makeregion();
    printf("%i polygon(s), %i region(s)\n",npoly,nregion);
    printf("lx=%i, ly=%i\n",lx,ly);
    // Calculate total area.
    //totarea = 0.0;
    //for (regctr=0; regctr<nregion; regctr++)
    // printf("region %i has area %f, contains %i polygons\n",regionid[regctr],
    // regionarea(nregcorn[regctr],regcorn[regctr]),npolyinreg[regctr]);
    // totarea += regionarea(nregcorn[regctr],regcorn[regctr]);
    //printf("totarea = %f\n",totarea);
    // Make map.
    pspicture(psfile);
    fclose(psfile);
    // Allocate memory for arrays.
    gridvx = (float*)malloc((lx+1)*sizeof(float));
    gridvy = (float*)malloc((lx+1)*sizeof(float));
    rho = (float*)malloc((lx+1)*sizeof(float));
    rho_0 = (float*)malloc((lx+1)*sizeof(float));
    vx = (float*)malloc((lx+1)*sizeof(float));
    vy = (float*)malloc((lx+1)*sizeof(float));
    x = (float*)malloc((lx+1)*sizeof(float));
    xappr = (float*)malloc((lx+1)*sizeof(float));
    y = (float*)malloc((lx+1)*sizeof(float));
    yappr = (float*)malloc((lx+1)*sizeof(float));
    within = (int*)malloc((lx+1)*sizeof(int));
    for (i=0; i<=lx; i++)
    gridvx = (float)malloc((ly+1)sizeof(float));
    gridvy = (float)malloc((ly+1)sizeof(float));
    rho = (float)malloc((ly+1)sizeof(float));
    rho_0 = (float)malloc((ly+1)sizeof(float));
    vx = (float)malloc((ly+1)sizeof(float));
    vy = (float)malloc((ly+1)sizeof(float));
    x = (float)malloc((ly+1)sizeof(float));
    xappr = (float)malloc((ly+1)sizeof(float));
    y = (float)malloc((ly+1)sizeof(float));
    yappr = (float)malloc((ly+1)sizeof(float));
    within = (int)malloc((ly+1)sizeof(int));
    // Digitize the density.
    bboxes();
    interior();
    digdens();
    // Solve the diffusion equation.
    do n = nonlinvoltra(); while (!n);
    // Print cartogram generate file.
    cartogram();
    // Read the transformed polygon coordinates.
    oldlx = lx;
    oldly = ly;
    oldmaxx = maxx;
    oldmaxy = maxy;
    oldminx = minx;
    oldminy = miny;
    genfile = fopen(CARTGENFILE,"r");
    countpoly(genfile);
    fclose(genfile);
    genfile = fopen(CARTGENFILE,"r");
    countcorn(genfile);
    fclose(genfile);
    lx = oldlx;
    ly = oldly;
    maxx = oldmaxx;
    maxy = oldmaxy;
    minx = oldminx;
    miny = oldminy;
    genfile = fopen(CARTGENFILE,"r");
    readcorn(genfile);
    fclose(genfile);
    makeregion();
    // Make cartogram
    psfile = fopen(CART2PS);
    pspicture(psfile);
    fclose(psfile);
    The part of the code where the bus error occurs is this:
    void interior(void)
    int i,inhowmanyregions,inregion[2],j,k,l,m,n,regctr;
    // Initialize within[][]. -1 means outside all regions.
    for (i=0; i<=lx; i++) for (j=0; j<=ly; j++) within[j] = -1;
    // Fill within[][].
    for (i=0; i<nregion; i++) for (j=0; j<npolyinreg; j++)
    for (k=0, n=npolycorn[polyinreg[j]]-1;
    k<npolycorn[polyinreg[j]]; n=k++)
    for (l=(int)ceil(MIN(polycorn[polyinreg[j]][k-1].y,
    polycorn[polyinreg[j]][k].y));
    l<MAX(polycorn[polyinreg[j]][k-1].y,
    polycorn[polyinreg[j]][k].y); l++)
    for (m=(int)floor(bbminx[polyinreg[j]]);
    m<(polycorn[polyinreg[j]][n].x-
    polycorn[polyinreg[j]][k].x)*
    (l-polycorn[polyinreg[j]][k].y)/
    (polycorn[polyinreg[j]][n].y-
    polycorn[polyinreg[j]][k].y)+
    polycorn[polyinreg[j]][k].x;
    m++)
    within[m][l] = i-within[m][l]-1;
    I really have no idea what is going on. Can anyone help?
    Thanks,
    mooseguy

    orangekay wrote:
    That is absolutely unreadable.
    I agree completely. How about also providing a link to a set of input files so that we could actually run the code ourselves? Otherwise, there is no chance to debug the source code, it is just a mess.
    You might have better luck with an older version of the file. To quote the comments:
    // Modified on March 31, 2005. Initialized maxchange in nonlinvoltra() as
    // INFTY. Replaced crnmbr() by a similar, but faster routine interior().
    // Many thanks to Stuart Anderson for pointing out this shortcut.
    I suspect that the "interior" function is just plain incorrect. It doesn't matter if it runs on some other OS. Something about it is wrong and the code is so cryptic that it can't be deciphered.

  • Going from iPhone 3GS to iPhone 5 and Mac OSX Tiger

    Hello,
    I currently have one of the first Intel Mac Book Pro's running OSX Tiger.  I also have a 3GS running ios 4.1 which I'm about to upgrade to the iPhone 5.
    What is the best way to back-up/transfer my contacts/txt's/etc from my 3GS to my 5?  I can't run the latest version of iTunes and eventually this year I will upgrade to a new iMac which would solve the problem...but for now I would like to transfer all my data over.
    Thanks,
    Mike

    The problem with that is my current iphone is running ios 4.1 and my laptop is running tiger so I don't have icloud.  Without upgrading to snow leopard and then to lion/mountian lion to get icloud is there any other option?

  • MPEG2 codec not working in Final Cut Pro on Mac OSX Tiger

    We have been using the File-export-Quicktime Conversion-MPEG2 codec for exporting of files from Final Cut Pro to DVD Studio Pro. On the new mac system that was just bought, the option does not show up.
    Currently the system is running Quicktime Pro 7.1.2/ FCP 5 and DVD Studio Pro 4 and it is a new mac system running Mac OSX Tiger.
    This problem has happened before on a mac running on an older system, but that was solved by reinstalling FCP and then DVD Studio pro and making sure that the QT Pro was of the latest version.
    Right now, we have reinstalled everything the same way, tried installing DVD Studio Pro after, we have also done a full software update of the software over the net.
    The codec is still not working, all the macs in the office are supposed to be upgraded to Mac osx tiger, but right now we can't do so, cos then we wouldn't be able to burn any DVDs.
    Please help, thanks.

    The installation of QT 7 is the culprit behind the missing MPEG-2 Export Component. But during upgrades, it doesn't always get rid of the file ... probably what happened on your older system when you upgraded to QT 7 or Tiger. Either the new system came with QT 7 preinstalled, therefore not including the Export Component, or if it was upgraded, the upgrade missed it.
    -DH

  • Unable to load OSX Tiger after powercut during software update

    My Imac G5 (purchased September 2005), running OSX Tiger, was in the middle of a software update when we had a powercut. Now, when you turn it on, it gets as far as the blue screen with the grey Mac OSX box and status bar (after the grey screen with the spinning dial), but no further. The status bar does not move and I cannot get it to safe boot. If I hold down the shift key after the start up tone, then the fans come on and it takes a little longer to go past the initial grey screen, but once again stops when you get to the blue screen and status bar. Also, my install discs have disappeared off the face of the planet. Help!

    Boot it from your install CD/DVD...
    "Try Disk Utility
    1. Insert the Mac OS X Install disc that came with your computer, then restart the computer while holding the C key.
    2. When your computer finishes starting up from the disc, choose Disk Utility from the Installer menu. (In Mac OS X 10.4 or later, you must select your language first.)
    Important: Do not click Continue in the first screen of the Installer. If you do, you must restart from the disc again to access Disk Utility.
    3. Click the First Aid tab.
    4. Click the disclosure triangle to the left of the hard drive icon to display the names of your hard disk volumes and partitions.
    5. Select your Mac OS X volume.
    6. Click Repair. Disk Utility checks and repairs the disk."
    If it completes fine, then use the Archive and Install feature...
    http://docs.info.apple.com/article.html?artnum=107120

  • How do I fix: DirectoryServices: Job appears to have crashed: Bus error

    Can anyone help with this problem? The only solution I have found is to erase and reinstall the OS. A reinstall alone will not fix it.
    I have experienced this problem on 3 Macs now, and Apple Care has virtually rebuilt my mini attempting to fix it. However to date, I haven't been able to find anyone at Apple who will look at the data. Here is what appears endlessly in /var/log/system.log:
    Apr 1 08:55:43 Peters-MacBook-Air com.apple.launchd[1] (com.apple.DirectoryServices[161]): Job appears to have crashed: Bus error
    Apr 1 08:55:43 Peters-MacBook-Air com.apple.launchd[1] (com.apple.DirectoryServices): Throttling respawn: Will start in 8 seconds
    Apr 1 08:55:43 Peters-MacBook-Air com.apple.ReportCrash.Root[156]: 2011-04-01 08:55:43.390 ReportCrash[156:140b] Saved crash report for DirectoryService[161] version ??? (???) to /Library/Logs/DiagnosticReports/DirectoryService2011-04-01-085543localhost.crash
    Apr 1 08:55:51 Peters-MacBook-Air DirectoryService[162]: Improper shutdown detected
    Apr 1 08:55:53 Peters-MacBook-Air com.apple.launchd[1] (com.apple.DirectoryServices[162]): Job appears to have crashed: Bus error
    Apr 1 08:55:53 Peters-MacBook-Air com.apple.launchd[1] (com.apple.DirectoryServices): Throttling respawn: Will start in 8 seconds
    Apr 1 08:55:53 Peters-MacBook-Air com.apple.ReportCrash.Root[156]: 2011-04-01 08:55:53.788 ReportCrash[156:380b] Saved crash report for DirectoryService[162] version ??? (???) to /Library/Logs/DiagnosticReports/DirectoryService2011-04-01-085553localhost.crash
    Apr 1 08:56:01 Peters-MacBook-Air DirectoryService[163]: Improper shutdown detected
    Apr 1 08:56:04 Peters-MacBook-Air com.apple.launchd[1] (com.apple.DirectoryServices[163]): Job appears to have crashed: Bus error
    Apr 1 08:56:04 Peters-MacBook-Air com.apple.launchd[1] (com.apple.DirectoryServices): Throttling respawn: Will start in 8 seconds
    Apr 1 08:56:04 Peters-MacBook-Air com.apple.ReportCrash.Root[156]: 2011-04-01 08:56:04.237 ReportCrash[156:472f] Saved crash report for DirectoryService[163] version ??? (???) to /Library/Logs/DiagnosticReports/DirectoryService2011-04-01-085604localhost.crash
    Apr 1 08:56:12 Peters-MacBook-Air DirectoryService[165]: Improper shutdown detected
    Here is one of the crash logs.
    Process: DirectoryService [226]
    Path: /usr/sbin/DirectoryService
    Identifier: DirectoryService
    Version: ??? (???)
    Code Type: X86-64 (Native)
    Parent Process: launchd [1]
    Date/Time: 2011-04-04 10:30:15.232 -0600
    OS Version: Mac OS X 10.6.6 (10J567)
    Report Version: 6
    Exception Type: EXCBADACCESS (SIGBUS)
    Exception Codes: 0x000000000000000a, 0x0000000100385000
    Crashed Thread: 1 Dispatch queue: com.apple.root.default-priority
    Thread 0: Dispatch queue: com.apple.main-thread
    0 libSystem.B.dylib 0x00007fff8503f2da machmsgtrap + 10
    1 libSystem.B.dylib 0x00007fff8503f94d mach_msg + 59
    2 com.apple.CoreFoundation 0x00007fff83955932 __CFRunLoopRun + 1698
    3 com.apple.CoreFoundation 0x00007fff83954dbf CFRunLoopRunSpecific + 575
    4 com.apple.CoreFoundation 0x00007fff83954b46 CFRunLoopRun + 70
    5 DirectoryService 0x000000010000dbe9 main + 3061
    6 DirectoryService 0x000000010000cfec start + 52
    Thread 1 Crashed: Dispatch queue: com.apple.root.default-priority
    0 libSystem.B.dylib 0x00007fff8509a33d strtok_r + 19
    1 DirectoryService 0x00000001000a9d04 FlatFileNode::FetchMatchingRecords(sBDPISearchRecordsContext*, void*, unsigned int*) + 1976
    2 DirectoryService 0x00000001000acad7 FlatFileNode::InternalSearchRecords(sBDPISearchRecordsContext*, void*, unsigned int*) + 681
    3 DirectoryService 0x00000001000acd5b FlatFileNode::SearchRecords(sBDPISearchRecordsContext*, void*, unsigned int*) + 237
    4 DirectoryService 0x00000001000a5a5b BaseDirectoryPlugin::GetRecordList(sGetRecordList*) + 309
    5 DirectoryService 0x00000001000a68a0 BaseDirectoryPlugin::ProcessRequest(void*) + 584
    6 DirectoryService 0x00000001000017fb CRequestHandler::HandlePluginCall(sComData**) + 715
    7 DirectoryService 0x00000001000024bc CRequestHandler::HandleRequest(sComData**) + 222
    8 DirectoryService 0x000000010002e42a CMessaging::SendInlineMessage(unsigned int) + 148
    9 DirectoryService 0x000000010000562b dsGetRecordList + 1113
    10 DirectoryService 0x0000000100082929 CCachePlugin::GetRecordListLibInfo(unsigned int, char const*, char const*, unsigned int, tDataList*, sCacheValidation* (*)(unsigned int, unsigned int, kvbuf_t*, tDataBuffer*, tRecordEntry*, unsigned int, void*, CCache*, char const**), kvbuf_t*, void*, CCache*, char const**, sCacheValidation**) + 221
    11 DirectoryService 0x000000010008933e CCachePlugin::DSgethostbyname_int(char*, char const*, char const*, int, bool, void**, int*) + 960
    12 DirectoryService 0x0000000100089ae2 CCachePlugin::DSgethostbynameservice(kvbuft*, int) + 336
    13 DirectoryService 0x000000010008f7e7 CCachePlugin::ProcessLookupRequest(int, char*, int, int) + 811
    14 DirectoryService 0x000000010002a0fd libinfoDSmigdoQuery + 559
    15 DirectoryService 0x000000010009325a _XQuery + 262
    16 DirectoryService 0x0000000100092fea DSlibinfoMIG_server + 106
    17 DirectoryService 0x00000001000282a1 dsmigdemux_internaldispatch(mach_msg_headert*, machmsg_headert*) + 65
    18 libSystem.B.dylib 0x00007fff850bbe24 machmsgserver + 357
    19 libSystem.B.dylib 0x00007fff8507b2c4 dispatch_call_block_andrelease + 15
    20 libSystem.B.dylib 0x00007fff85059810 dispatch_workerthread2 + 206
    21 libSystem.B.dylib 0x00007fff85059168 pthreadwqthread + 353
    22 libSystem.B.dylib 0x00007fff85059005 start_wqthread + 13
    Thread 2:
    0 libSystem.B.dylib 0x00007fff8503f2da machmsgtrap + 10
    1 libSystem.B.dylib 0x00007fff8503f94d mach_msg + 59
    2 com.apple.CoreFoundation 0x00007fff83955932 __CFRunLoopRun + 1698
    3 com.apple.CoreFoundation 0x00007fff83954dbf CFRunLoopRunSpecific + 575
    4 com.apple.CoreFoundation 0x00007fff83954b46 CFRunLoopRun + 70
    5 DirectoryService 0x000000010001c784 CPluginRunLoopThread::ThreadMain() + 150
    6 ...ectoryServiceCore.Framework 0x00000001001790ac DSCThread::Run() + 36
    7 ...ectoryServiceCore.Framework 0x000000010017934b DSLThread::_RunWrapper(void*) + 67
    8 libSystem.B.dylib 0x00007fff85078536 pthreadstart + 331
    9 libSystem.B.dylib 0x00007fff850783e9 thread_start + 13
    Thread 3: Dispatch queue: com.apple.root.high-priority
    0 libSystem.B.dylib 0x00007fff8503f316 semaphorewaittrap + 10
    1 libSystem.B.dylib 0x00007fff8507b669 dispatch_semaphore_waitslow + 211
    2 DirectoryService 0x00000001000286bd ___StartKernelListener_block_invoke8 + 33
    3 libSystem.B.dylib 0x00007fff8507b2c4 dispatch_call_block_andrelease + 15
    4 libSystem.B.dylib 0x00007fff85059831 dispatch_workerthread2 + 239
    5 libSystem.B.dylib 0x00007fff85059168 pthreadwqthread + 353
    6 libSystem.B.dylib 0x00007fff85059005 start_wqthread + 13
    Thread 4: Dispatch queue: com.apple.libdispatch-manager
    0 libSystem.B.dylib 0x00007fff8505816a kevent + 10
    1 libSystem.B.dylib 0x00007fff8505a03d dispatch_mgrinvoke + 154
    2 libSystem.B.dylib 0x00007fff85059d14 dispatch_queueinvoke + 185
    3 libSystem.B.dylib 0x00007fff8505983e dispatch_workerthread2 + 252
    4 libSystem.B.dylib 0x00007fff85059168 pthreadwqthread + 353
    5 libSystem.B.dylib 0x00007fff85059005 start_wqthread + 13
    Thread 5:
    0 libSystem.B.dylib 0x00007fff8503f2da machmsgtrap + 10
    1 libSystem.B.dylib 0x00007fff8503f94d mach_msg + 59
    2 libSystem.B.dylib 0x00007fff8504ac4e vprocmig_lookup2 + 182
    3 libSystem.B.dylib 0x00007fff8504aaa5 bootstraplookup2 + 268
    4 libSystem.B.dylib 0x00007fff85053ec4 dsrunning + 52
    5 libSystem.B.dylib 0x00007fff85053ce1 searchgetmodule + 86
    6 libSystem.B.dylib 0x00007fff85053c68 searchitembynumber + 196
    7 libSystem.B.dylib 0x00007fff85073a56 getpwuid + 26
    8 com.apple.CoreFoundation 0x00007fff8393cf49 _CFUpdateUserInfo + 105
    9 com.apple.CoreFoundation 0x00007fff8393ce96 _CFUserName + 22
    10 com.apple.CoreFoundation 0x00007fff8393b119 __CFXPreferencesGetManagedSourceForBundleIDAndUser + 537
    11 com.apple.CoreFoundation 0x00007fff8393aae7 __CFXPreferencesGetSearchListForBundleID + 119
    12 com.apple.CoreFoundation 0x00007fff8393a9fb CFPreferencesCopyAppValue + 43
    13 com.apple.CoreFoundation 0x00007fff8393a999 _CFBundleCopyUserLanguages + 665
    14 com.apple.CoreFoundation 0x00007fff8393a1b4 _CFBundleAddPreferredLprojNamesInDirectory + 404
    15 com.apple.CoreFoundation 0x00007fff83939c8a _CFBundleGetLanguageSearchList + 170
    16 com.apple.CoreFoundation 0x00007fff8393a4ba _CFBundleAddPreferredLprojNamesInDirectory + 1178
    17 com.apple.CoreFoundation 0x00007fff83993e97 _CFBundleCopyLanguageSearchListInDirectory + 167
    18 com.apple.CoreFoundation 0x00007fff839990d9 CFBundleCopyResourceURLsOfTypeInDirectory + 249
    19 DirectoryService 0x000000010001eb92 CPluginHandler::LoadPlugins(unsigned int) + 388
    20 DirectoryService 0x000000010000e9c9 CPluginHandler::ThreadMain() + 491
    21 ...ectoryServiceCore.Framework 0x00000001001790ac DSCThread::Run() + 36
    22 ...ectoryServiceCore.Framework 0x000000010017934b DSLThread::_RunWrapper(void*) + 67
    23 libSystem.B.dylib 0x00007fff85078536 pthreadstart + 331
    24 libSystem.B.dylib 0x00007fff850783e9 thread_start + 13
    Thread 6: Dispatch queue: com.apple.root.default-priority
    0 libSystem.B.dylib 0x00007fff8503f2da machmsgtrap + 10
    1 libSystem.B.dylib 0x00007fff8503f94d mach_msg + 59
    2 libSystem.B.dylib 0x00007fff850bbe93 machmsgserver + 468
    3 libSystem.B.dylib 0x00007fff8507b2c4 dispatch_call_block_andrelease + 15
    4 libSystem.B.dylib 0x00007fff85059810 dispatch_workerthread2 + 206
    5 libSystem.B.dylib 0x00007fff85059168 pthreadwqthread + 353
    6 libSystem.B.dylib 0x00007fff85059005 start_wqthread + 13
    Thread 7: Dispatch queue: com.apple.root.high-priority
    0 libSystem.B.dylib 0x00007fff8507b8c2 syscall + 10
    1 DirectoryService 0x00000001000284ca ___StartKernelListener_block_invoke9 + 72
    2 libSystem.B.dylib 0x00007fff8507b2c4 dispatch_call_block_andrelease + 15
    3 libSystem.B.dylib 0x00007fff85059831 dispatch_workerthread2 + 239
    4 libSystem.B.dylib 0x00007fff85059168 pthreadwqthread + 353
    5 libSystem.B.dylib 0x00007fff85059005 start_wqthread + 13
    Thread 1 crashed with X86 Thread State (64-bit):
    rax: 0x0000000000000000 rbx: 0x000000010040c300 rcx: 0x00007fff70996630 rdx: 0x000000010040bab0
    rdi: 0x0000000100385000 rsi: 0x00000001000eebea rbp: 0x000000010037fd70 rsp: 0x000000010037fd70
    r8: 0x0000000000000000 r9: 0x000000010040c1e0 r10: 0x0000000000000001 r11: 0x0000000000000011
    r12: 0x0000000000000000 r13: 0x0000000000000001 r14: 0x000000010040c380 r15: 0x000000010037fea0
    rip: 0x00007fff8509a33d rfl: 0x0000000000010206 cr2: 0x0000000100385000
    Binary Images:
    0x100000000 - 0x100120ff7 +DirectoryService ??? (???) <910DBBCD-D741-1530-210F-9A3944045A5B> /usr/sbin/DirectoryService
    0x100171000 - 0x100182fff com.apple.DirectoryServiceCore.Framework 3.6 (621.9) <16FCF0D0-89B6-6BD2-F8CA-443E1A89307C> /System/Library/PrivateFrameworks/DirectoryServiceCore.framework/Versions/A/Dir ectoryServiceCore
    0x7fff5fc00000 - 0x7fff5fc3bdef dyld 132.1 (???) <DB8B8AB0-0C97-B51C-BE8B-B79895735A33> /usr/lib/dyld
    0x7fff80a41000 - 0x7fff80b58fef libxml2.2.dylib 10.3.0 (compatibility 10.0.0) <AFE91118-DBF3-6313-37B8-8A2002C6A46B> /usr/lib/libxml2.2.dylib
    0x7fff80bc6000 - 0x7fff80c7cfff libobjc.A.dylib 227.0.0 (compatibility 1.0.0) <1960E662-D35C-5D98-EB16-D43166AE6A22> /usr/lib/libobjc.A.dylib
    0x7fff813f6000 - 0x7fff81445ff7 com.apple.DirectoryService.PasswordServerFramework 6.0 (6.0) <F5B744D7-AEAF-6B66-43CF-6E31CDA18EAB> /System/Library/PrivateFrameworks/PasswordServer.framework/Versions/A/PasswordS erver
    0x7fff81446000 - 0x7fff8144aff7 libmathCommon.A.dylib 315.0.0 (compatibility 1.0.0) <95718673-FEEE-B6ED-B127-BCDBDB60D4E5> /usr/lib/system/libmathCommon.A.dylib
    0x7fff8144b000 - 0x7fff814ebfff com.apple.LaunchServices 362.2 (362.2) <A8EDC37C-1D40-5ED0-49BE-90EF110A6B3A> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchS ervices.framework/Versions/A/LaunchServices
    0x7fff814ec000 - 0x7fff81569fef libstdc++.6.dylib 7.9.0 (compatibility 7.0.0) <35ECA411-2C08-FD7D-11B1-1B7A04921A5C> /usr/lib/libstdc++.6.dylib
    0x7fff817a6000 - 0x7fff817d1ff7 libxslt.1.dylib 3.24.0 (compatibility 3.0.0) <6589F0FC-41DB-8494-CA8B-487F4E328EB9> /usr/lib/libxslt.1.dylib
    0x7fff821e1000 - 0x7fff82467fff com.apple.security 6.1.1 (37594) <1B4E1ABD-1BB3-DA49-F574-0EEB23E73C6A> /System/Library/Frameworks/Security.framework/Versions/A/Security
    0x7fff824fd000 - 0x7fff82525fff com.apple.DictionaryServices 1.1.2 (1.1.2) <E9269069-93FA-2B71-F9BA-FDDD23C4A65E> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Diction aryServices.framework/Versions/A/DictionaryServices
    0x7fff828c2000 - 0x7fff82922fe7 com.apple.framework.IOKit 2.0 (???) <D107CB8A-5182-3AC4-35D0-07068A695C05> /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit
    0x7fff82968000 - 0x7fff8297afe7 libsasl2.2.dylib 3.15.0 (compatibility 3.0.0) <30FE378B-99FE-8C7C-06D0-A3AA0A0A70D4> /usr/lib/libsasl2.2.dylib
    0x7fff829ff000 - 0x7fff82a20fff libresolv.9.dylib 41.0.0 (compatibility 1.0.0) <9B7AEE96-D18E-5ECF-9837-BD5CFD397831> /usr/lib/libresolv.9.dylib
    0x7fff83909000 - 0x7fff83a80fe7 com.apple.CoreFoundation 6.6.4 (550.42) <770C572A-CF70-168F-F43C-242B9114FCB5> /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
    0x7fff84e33000 - 0x7fff84e44ff7 libz.1.dylib 1.2.3 (compatibility 1.0.0) <5BAFAE5C-2307-C27B-464D-582A10A6990B> /usr/lib/libz.1.dylib
    0x7fff84ee3000 - 0x7fff84f2ffff libauto.dylib ??? (???) <F7221B46-DC4F-3153-CE61-7F52C8C293CF> /usr/lib/libauto.dylib
    0x7fff84f7b000 - 0x7fff84fb8fff com.apple.LDAPFramework 2.0 (120.1) <A890D6E1-2721-1C1B-3B3C-13ACE5EF6B3D> /System/Library/Frameworks/LDAP.framework/Versions/A/LDAP
    0x7fff84ff3000 - 0x7fff8503dff7 com.apple.Metadata 10.6.3 (507.15) <5170FCE0-ED6C-2E3E-AB28-1DDE3F628FC5> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadat a.framework/Versions/A/Metadata
    0x7fff8503e000 - 0x7fff851fffff libSystem.B.dylib 125.2.1 (compatibility 1.0.0) <71E6D4C9-F945-6EC2-998C-D61AD590DAB6> /usr/lib/libSystem.B.dylib
    0x7fff857a0000 - 0x7fff857a1ff7 com.apple.TrustEvaluationAgent 1.1 (1) <A91CE5B9-3C63-5F8C-5052-95CCAB866F72> /System/Library/PrivateFrameworks/TrustEvaluationAgent.framework/Versions/A/Tru stEvaluationAgent
    0x7fff857c5000 - 0x7fff85882ff7 com.apple.CoreServices.OSServices 357 (357) <ABB9A264-05D8-DFF1-35DB-C4B19C4E0B71> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServi ces.framework/Versions/A/OSServices
    0x7fff85883000 - 0x7fff85a41fff libicucore.A.dylib 40.0.0 (compatibility 1.0.0) <781E7B63-2AD0-E9BA-927C-4521DB616D02> /usr/lib/libicucore.A.dylib
    0x7fff85b42000 - 0x7fff85b83fff com.apple.SystemConfiguration 1.10.5 (1.10.2) <FB39F09C-57BB-D8CC-348D-93E00C602F7D> /System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfi guration
    0x7fff85fab000 - 0x7fff8605afff edu.mit.Kerberos 6.5.10 (6.5.10) <05AEA348-2288-E1C0-8F10-0D8880AE7530> /System/Library/Frameworks/Kerberos.framework/Versions/A/Kerberos
    0x7fff861c2000 - 0x7fff8627bfff libsqlite3.dylib 9.6.0 (compatibility 9.0.0) <2C5ED312-E646-9ADE-73A9-6199A2A43150> /usr/lib/libsqlite3.dylib
    0x7fff8627c000 - 0x7fff86292fef libbsm.0.dylib ??? (???) <0321D32C-9FE1-3919-E03E-2530A0C1191B> /usr/lib/libbsm.0.dylib
    0x7fff86958000 - 0x7fff86a79fe7 libcrypto.0.9.8.dylib 0.9.8 (compatibility 0.9.8) <48AEAFE1-21F4-B3C8-4199-35AD5E8D0613> /usr/lib/libcrypto.0.9.8.dylib
    0x7fff86c7c000 - 0x7fff86cb6fff libssl.0.9.8.dylib 0.9.8 (compatibility 0.9.8) <C7153747-50E3-32DA-426F-CC4C505D1D6C> /usr/lib/libssl.0.9.8.dylib
    0x7fff8740e000 - 0x7fff8741cff7 libkxld.dylib ??? (???) <4016E9E6-0645-5384-A697-2775B5228113> /usr/lib/system/libkxld.dylib
    0x7fff87454000 - 0x7fff87788fff com.apple.CoreServices.CarbonCore 861.23 (861.23) <08F360FA-1771-4F0B-F356-BEF68BB9D421> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonC ore.framework/Versions/A/CarbonCore
    0x7fff878b9000 - 0x7fff878b9ff7 com.apple.CoreServices 44 (44) <DC7400FB-851E-7B8A-5BF6-6F50094302FB> /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices
    0x7fff8864d000 - 0x7fff88688fff com.apple.AE 496.4 (496.4) <CB905496-4D6B-F26A-399D-840D26DBEE5B> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.fram ework/Versions/A/AE
    0x7fff88878000 - 0x7fff8894afe7 com.apple.CFNetwork 454.11.5 (454.11.5) <B3E2BE12-D7AA-5940-632A-1E5E7BF8E6E3> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CFNetwo rk.framework/Versions/A/CFNetwork
    0x7fff8894b000 - 0x7fff88bceff7 com.apple.Foundation 6.6.4 (751.42) <9A99D378-E97A-8C0F-3857-D0FAA30FCDD5> /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
    0x7fff88e7f000 - 0x7fff88f0ffff com.apple.SearchKit 1.3.0 (1.3.0) <45BA1053-9196-3C2F-2421-AFF5E09627CC> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchK it.framework/Versions/A/SearchKit
    0x7fff89120000 - 0x7fff8912ffff com.apple.NetFS 3.2.1 (3.2.1) <4396CAD7-FDAF-8C63-97FA-74E7124DFF2A> /System/Library/Frameworks/NetFS.framework/Versions/A/NetFS
    0x7fff8913e000 - 0x7fff89144fff com.apple.DiskArbitration 2.3.1 (2.3.1) <D5D3AE5F-83AC-0CEB-2DC3-755F0CC20A4E> /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration
    0x7fffffe00000 - 0x7fffffe01fff libSystem.B.dylib ??? (???) <71E6D4C9-F945-6EC2-998C-D61AD590DAB6> /usr/lib/libSystem.B.dylib

    Any fix for this yet?
    com.apple.DirectoryServices crashes and attempts to restart every 10 seconds on my system:
    10/10/11 4:05:29 PM    com.apple.launchd[1]    (com.apple.DirectoryServices[1791]) Job appears to have crashed: Bus error
    10/10/11 4:05:29 PM    com.apple.launchd[1]    (com.apple.DirectoryServices) Throttling respawn: Will start in 7 seconds
    10/10/11 4:05:29 PM    com.apple.ReportCrash.Root[1789]    2011-10-10 16:05:29.978 ReportCrash[1789:4543] Saved crash report for DirectoryService[1791] version ??? (???) to /Library/Logs/DiagnosticReports/DirectoryService_2011-10-10-160529_localhost.cr ash

Maybe you are looking for