********> bugfix.26 Author: Bill Ross Date: 4/21/98 Programs: xleap Severity: moderate Description: Crashes with floating point error when edit window of 1-atom molecule (such as an ion) is being created. Only seen on DEC Alphas, although it's a basic logic error. Fix: Make the folllowing changes to x3d.c: ------------------------------------------------------------------------------ *** OLD x3d.c --- NEW x3d.c *************** *** 639,646 x3dEngine->iScreenWidth, x3dEngine->iScreenHeight )); MESSAGE(( "Checking if scaling in X direction fits Y direction\n" )); ! dScale = x3dEngine->iScreenWidth / dXWidth; ! if ( dXWidth < VERYSMALL && dYWidth < VERYSMALL ) { dScale = 1; } else if ( dScale * dYWidth < x3dEngine->iScreenWidth ) { MESSAGE(( "Scaling X scale = %lf\n", dScale )); --- 639,645 ----- x3dEngine->iScreenWidth, x3dEngine->iScreenHeight )); MESSAGE(( "Checking if scaling in X direction fits Y direction\n" )); ! if ( dXWidth < VERYSMALL ) dScale = 1; else dScale = x3dEngine->iScreenWidth / dXWidth; *************** *** 642,648 dScale = x3dEngine->iScreenWidth / dXWidth; if ( dXWidth < VERYSMALL && dYWidth < VERYSMALL ) { dScale = 1; ! } else if ( dScale * dYWidth < x3dEngine->iScreenWidth ) { MESSAGE(( "Scaling X scale = %lf\n", dScale )); } else if ( dScale * dYWidth >= x3dEngine->iScreenWidth ){ dScale = x3dEngine->iScreenHeight/dYWidth; --- 641,650 ----- MESSAGE(( "Checking if scaling in X direction fits Y direction\n" )); if ( dXWidth < VERYSMALL ) dScale = 1; ! else ! dScale = x3dEngine->iScreenWidth / dXWidth; ! ! if ( dScale * dYWidth < x3dEngine->iScreenWidth ) { MESSAGE(( "Scaling X scale = %lf\n", dScale )); } else if ( dYWidth > VERYSMALL ) { dScale = x3dEngine->iScreenHeight/dYWidth; *************** *** 644,650 dScale = 1; } else if ( dScale * dYWidth < x3dEngine->iScreenWidth ) { MESSAGE(( "Scaling X scale = %lf\n", dScale )); ! } else if ( dScale * dYWidth >= x3dEngine->iScreenWidth ){ dScale = x3dEngine->iScreenHeight/dYWidth; MESSAGE(( "Scaling Y scale = %lf\n", dScale )); } --- 646,652 ----- if ( dScale * dYWidth < x3dEngine->iScreenWidth ) { MESSAGE(( "Scaling X scale = %lf\n", dScale )); ! } else if ( dYWidth > VERYSMALL ) { dScale = x3dEngine->iScreenHeight/dYWidth; MESSAGE(( "Scaling Y scale = %lf\n", dScale )); } ------------------------------------------------------------------------------