Print

Print


I've committed to CVS a modified version of chr_ctoi.f that returns
non-zero status if the supplied number will not fit into a INTEGER*4. It
now looks like this (sorry TimJ, still in fortran):

*  Local Variables:
      INTEGER IOSTAT             ! I/O status from READ/WRITE
      INTEGER*8 LVALUE           ! Long value

...

*        Read the value into a long int first to reduce chances of overflow.
            FORMAT = '(BN, I'//COUNT//')'
            READ( STRING( 1 : NCHAR ), FORMAT , IOSTAT=IOSTAT ) LVALUE

*        Check the read operation was succesfull.
            IF ( IOSTAT .NE. 0 ) THEN
               STATUS = SAI__ERROR

*        If it was, convert the long int to a short int and check for overflow
*        by comparing their values.
            ELSE
               IVALUE = LVALUE
               IF( IVALUE .NE. LVALUE ) STATUS = SAI__ERROR
            END IF

Speed-wise, converting 5,000,000 random integers seems to take no longer
with the new version than with the old.

This seems to fix the problem in KAPPA:FITSMOD reported by TimL.

David