home *** CD-ROM | disk | FTP | other *** search
- * ARTLib Version 1.01 Date 28-Jan-1993
- *
- * Library of useful i/o routines from Alan Thawley
- * (phone +44(0)371 821009, fax +44(0)371 821323)
- * Copyright A.R. Thawley, 1993. These routines may be used and
- * incorporated into other programs after compilation but the source
- * code may not be sold or licensed without permission of the author.
- *
- * FLQUES Asks for name of and opens input file
- * LENSTR Returns length of filled portion of string
- * IDATE Returns date and time in default string form
- * XYREAD Read 'N' values into array 'X' then N values into array 'Y'
- * VAREAD Read 'NOVAR' values into array 'X' and a possible string
- * located at the 'NAMLOC' th position
- * SECNDS Read in time and return it converted to seconds
- *
- * Version History
- * 1.0 Updated from VAX-based Fortran 66 to Fortran 77 on Acorn
- * Archimedes under Release 2 of Acorn Fortran 77 on an Acorn
- * A5000 computer running RiscOS 3.1. 27-Jan-1993
- *
- * 1.01 Amended display of message reporting file opened in FLQUES.
- * 28-Jan-1993
- *
- * ---------------------------------------------------------------
- *
- * SUBROUTINE FLQUES
- *
- * PURPOSE
- * TO ASK NAME OF FILE TO BE ACCESSED AND TO OPEN THAT FILE
- * IN READONLY MODE
- *
- * AUTHOR
- * A.R. THAWLEY
- * 8 THE COPSE, BANNISTER GREEN, FELSTED, ESSEX, ENGLAND CM6 3NP
- *
- * ---------------------------------------------------------------
- *
- SUBROUTINE FLQUES(ILUN,QUERY,CURDIR,FILNAM)
- CHARACTER * (*) FILNAM, QUERY, CURDIR
- CHARACTER * 80 INFILE, TESTR
- CHARACTER * 3 ANS
- CHARACTER * 1 YES, YSMALL, NO, NSMALL
- INTEGER MAXLEN
- PARAMETER (MAXLEN = 10)
- DATA YES/'Y'/, YSMALL/'y'/, NO/'N'/, NSMALL/'n'/
- 100 PRINT *, QUERY
- READ (*,1010) FILNAM
- 1010 FORMAT (A)
- NOCHAR = LENSTR(FILNAM)
- IF (NOCHAR .GT. 1 .AND. NOCHAR .LE. MAXLEN) GO TO 110
- WRITE (*,1020) MAXLEN
- 1020 FORMAT (' ','Between 1 and ',I2,' letters needed. Try again!')
- GO TO 100
- 110 IF ( (INDEX(FILNAM,':') .EQ. 0)
- + .OR. (INDEX(FILNAM,'.') .EQ. 0) ) THEN
- INFILE = CURDIR(1:LENSTR(CURDIR)) // FILNAM(1:NOCHAR)
- ELSE
- INFILE = CURDIR(1:LENSTR(CURDIR))
- ENDIF
- OPEN (UNIT = ILUN, FILE = INFILE, STATUS = 'OLD', ERR=120)
- READ (ILUN, 1010, ERR = 120, END = 120) TESTR
- REWIND (ILUN)
- WRITE (*,1040) INFILE, ILUN
- 1040 FORMAT (' File: ',A/' has been opened successfully'/
- + ' It is being read now on LUN',I4/)
- RETURN
- 120 WRITE (*,1050) FILNAM
- 1050 FORMAT (' ','Are you sure you have this file: ',A/
- + ' ','where you say it is? If you want to enter it again'/
- + ' ','type "Y", otherwise "N" ?'$)
- READ (*,1060) ANS
- 1060 FORMAT (3A1)
- IF (ANS(1:1) .EQ. YES .OR. ANS(1:1) .EQ. YSMALL) GO TO 100
- IF (ANS(1:1) .NE. NO .OR. ANS(1:1) .EQ. NSMALL) GO TO 130
- WRITE (*,1080)
- 1080 FORMAT (1H0,'Filename entry abandoned - STOPPING!')
- STOP
- 130 WRITE (*,1070)
- 1070 FORMAT (' ','Try again. The only answers allowed are',
- + ' YES or NO!')
- GO TO 120
- END
- * ---------------------------------------------------------------
- *
- * FUNCTION LENSTR(STRING)
- *
- * Determines length of string excluding any blank padding
- *
- * SOURCE
- * "Problem Solving and Structured Programming in FORTRAN 77", 3rd edn,
- * Elliot B. Koffman, Frank L. Friedman. Pub. Addison-Wesley, Reading, Mass.
- * 1987.
- *
- * INPUT ARGUMENTS
- * STRING - string whose length is to be determined
- *
- * AUTHOR
- * A.R. THAWLEY
- * 8 THE COPSE, BANNISTER GREEN, FELSTED, ESSEX, ENGLAND CM6 3NP
- * ---------------------------------------------------------------
- *
- INTEGER FUNCTION LENSTR(STRING)
-
- CHARACTER * (*) STRING
- *
- * Local declarations
- *
- CHARACTER *1 BLANK
- PARAMETER (BLANK = ' ')
- INTEGER NEXT
- *
- * Start with the last character and find the first non-blank character
- *
- DO 10 NEXT = LEN(STRING), 1, -1
- IF (STRING(NEXT : NEXT) .NE. BLANK) THEN
- LENSTR = NEXT
- RETURN
- ENDIF
- 10 CONTINUE
- *
- * All characters are blanks if this is reached
- *
- LENSTR = 0
- *
- RETURN
- END
-
- * ---------------------------------------------------------------
- * SUBROUTINE IDATE
- *
- * AUTHOR
- * A.R. THAWLEY
- * 8 THE COPSE, BANNISTER GREEN, FELSTED, ESSEX, ENGLAND CM6 3NP
- * ---------------------------------------------------------------
- *
- SUBROUTINE IDATE(DATRES)
- CHARACTER * (*) DATRES
- INTEGER IBLOCK(8),IMAP
- PARAMETER (IMAP = ?IFF)
-
- * String form as returned by the operating system
- *
- IBLOCK(1) = 0
- CALL OSWORD(14,IBLOCK)
- *
- ICURR = 1
- DO 100 I = 1,8
- IVAR = IBLOCK(I)
- *
- NBITS = 0
- DO 90 J = 1,4
- ICHAR1 = ISHFT(IVAR,NBITS)
- ICHAR1 = IAND(ICHAR1,IMAP)
- DATRES(ICURR:ICURR) = CHAR(ICHAR1)
- NBITS = NBITS - 8
- ICURR = ICURR + 1
- 90 CONTINUE
- 100 CONTINUE
- RETURN
- END
- * ---------------------------------------------------------------
- *
- * SUBROUTINE XYREAD
- *
- * PURPOSE
- * TO READ N X, Y VALUES INTO THE APPROPRIATE ARRAYS. VALUES
- * MAY BE INTEGER OR DECIMAL BUT SINGLE PRECISION FLOATING POINT
- * VALUES WILL BE RETURNED IN ARRAYS X AND Y.
- *
- * USAGE
- * CALL XYREAD(X,Y,N,INLUN,IERLUN,IERROR)
- *
- * PARAMETERS
- * X VECTOR OF INDEPENDENT VARIABLE
- * Y VECTOR OF DEPENDENT VARIABLE
- * N LENGTH OF VECTORS X AND Y
- * INLUN INPUT LOGICAL CHANNEL NUMBER
- * IERLUN ERROR OUTPUT LOGICAL CHANNEL NUMBER
- * IERROR ERROR INDICATOR
- * = 1 FOR END OF FILE
- * = 2 FOR UNEXPECTED CHARACTERS
- * = 3 FOR MORE THAN 'N' X,Y VALUES FOUND
- * = 4 HARDWARE ERROR DURING FILE READ
- *
- * METHOD
- * READ N X VALUES AND THEN N Y VALUES INTO VECTORS X & Y
- * BY READING LINES OF LENGTH UP TO 'LENLIN' FROM THE INPUT FILE
- * AS A STRING WHICH IS THEN SCANNED FOR CHARACTERS DEFINING
- * INTEGER OR FLOATING POINT FORMAT NUMBERS.
- * NOTE: SCIENTIFIC FORMAT NUMBERS ARE NOT DECIPHERED.
- * VALUES MAY BE ONE-PER-LINE OR AS MANY VALUES PER LINE AS WILL
- * FIT SEPARATED BY COMMAS. TABS AND MULTIPLE SPACES WILL BE TREATED
- * AS LINE TERMINATORS.
- *
- * AUTHOR
- * A.R. THAWLEY
- * 8 THE COPSE, BANNISTER GREEN, FELSTED, ESSEX, ENGLAND CM6 3NP
- *
- * ---------------------------------------------------------------
- *
- SUBROUTINE XYREAD(X,Y,N,INLUN,IERLUN,IERROR)
- DIMENSION X(N), Y(N)
- INTEGER LENLIN
- PARAMETER (LENLIN = 250)
- CHARACTER * 1 PLUS, MINUS, BLANK, COMMA, DECPNT, KAR
- CHARACTER * 1 NULL, LINEI, LIN1P1, TAB
- CHARACTER * 1 NUM(10)
- CHARACTER * (LENLIN) LINE
- LOGICAL LINEND
- INTEGER INT, IFR, MAXINT
- PARAMETER (MAXINT = 214748364)
- PARAMETER (PLUS = '+', MINUS = '-', BLANK = ' ', COMMA = ',')
- PARAMETER (DECPNT = '.')
- DATA NUM /'0','1','2','3','4','5','6','7','8','9'/
- NULL = CHAR(0)
- TAB = CHAR(9)
- IERROR = 0
- NOTOT = 2 * N
- NOVAR = 0
- *
- * READ IN LINE
- *
- 100 READ (INLUN,1000,ERR=8025,END=8015) LINE
- 1000 FORMAT (A250)
- NCHARS = LENSTR(LINE)
- *
- * WRITE (*,9000) NCHARS
- *9000 FORMAT (1H0,'SUBR. XYREAD'/1H0,'NUMBER OF CHARACTERS = ',I4)
- * WRITE (*, 9010) LINE
- *9010 FORMAT (1H ,'LINE 9010. READ IN FOLLOWING LINE:'/1H0,A250)
- *
- IF (NCHARS .EQ. 0) GO TO 100
- KARCNT = 1
- LINEND = .FALSE.
- 105 DO 120 I = KARCNT,NCHARS
- LINEI = LINE(I:I)
- *
- * LOOK FOR COMMA, NULLS, BLANKS OR TABS AT END OF LINE
- *
- * WRITE (*,9020) I, LINEI, ICHAR(LINEI)
- *9020 FORMAT (1H ,I4,'TH CHARACTER IS: "',A1,'"! ASCII = ',I4)
- *
- IF (LINEI .NE. BLANK .AND. LINEI .NE. NULL .AND.
- + LINEI .NE. TAB) GO TO 110
- *
- * WRITE (*,9030)
- *9030 FORMAT (1H ,'MUST BE A BLANK, NULL OR A TAB TO REACH HERE!')
- *
- IF (I .EQ. KARCNT) GO TO 100
- *
- * NO MORE CHARACTERS IN LINE?
- *
- LINEND = .TRUE.
- IF (I .EQ. NCHARS .OR. LINEI .EQ. TAB) GO TO 125
- LIN1P1 = LINE(I+1:I+1)
- IF (LIN1P1 .EQ. BLANK .OR. LIN1P1 .EQ. NULL .OR.
- + LIN1P1 .EQ. TAB) GO TO 125
- 110 IF (LINEI .EQ. COMMA) GO TO 125
- 120 CONTINUE
- *
- * CHECK FOR SIGN
- *
- 125 SIGNAL = 1.0
- LINEI = LINE(KARCNT:KARCNT)
- IF (LINEI .EQ. PLUS) GO TO 130
- IF (LINEI .NE. MINUS) GO TO 140
- SIGNAL = -1.0
- 130 KARCNT = KARCNT + 1
- *
- * WHEN COMMA FOUND SET VALUE INTO X OR Y
- *
- 140 INT = 0.0
- IFR = 0.0
- IFRCNT = 0
- DO 170 J = KARCNT, I - 1
- KAR = LINE(J:J)
- IF (KAR .EQ. DECPNT) GO TO 180
- DO 150 K = 1,10
- IF (KAR .EQ. NUM(K)) GO TO 160
- 150 CONTINUE
- *
- * ERROR IN INTEGER PART, PRINT OUT OFFENDING LINE
- *
- IERROR = 2
- WRITE (IERLUN,1010) LINE
- WRITE (*,1010) LINE
- 1010 FORMAT (1H0,'THIS LINE CONTAINS NON-NUMERIC CHARACTER(S)'/
- + 1H ,A250)
- RETURN
- 160 INT = 10 * INT + (K - 1)
- *
- * REAL (FLOATING POINT) VERSION OF 160 IS:
- * INT = AINT(INT * 10.0 + FLOAT(K - 1))
- *
- *
- * CHECK FOR OVERFLOW
- *
- IF (INT .GT. MAXINT) GO TO 8000
- 170 CONTINUE
- *
- * DECODE FRACTIONAL PART OF NUMBER
- *
- 180 KARCNT = J + 1
- IF (KARCNT .GE. I) GO TO 215
- DO 210 J = KARCNT, I - 1
- KAR = LINE(J:J)
- DO 190 K = 1,10
- IF (KAR .EQ. NUM(K)) GO TO 200
- 190 CONTINUE
- *
- * ERROR IN FRACTIONAL PART OF NUMBER, PRINT OUT OFFENDING LINE
- *
- IERROR = 2
- WRITE (IERLUN,1010) LINE
- WRITE (*,1010) LINE
- RETURN
- 200 IFR = 10 * IFR + (K - 1)
- *
- * REAL (FLOATING POINT) VERSION OF 200 IS:
- * IFR = AINT(IFR * 10.0 + FLOAT(K - 1))
- *
- *
- * CHECK FOR OVERFLOW
- *
- * WRITE (*,9060) INT, IFR
- *9060 FORMAT (1H ,'AT PRESENT INT = ',I8,', IFR = ',I8)
- *
- IF (IFR .GT. MAXINT) GO TO 8000
- IFRCNT = IFRCNT + 1
- 210 CONTINUE
- 215 NOVAR = NOVAR + 1
- IF (NOVAR .LE. NOTOT) GO TO 218
- WRITE (IERLUN,1020) N
- WRITE (*,1020) N
- 1020 FORMAT (1H0,'THERE ARE MORE THAN ',I4,
- + ' POINTS IN THIS BATCH. CONTINUING:')
- RETURN
- 218 TEMP = SIGN((FLOAT(INT) + (FLOAT(IFR)/(10.0 ** IFRCNT))),SIGNAL)
- *
- * REAL (FLOATING POINT) VERSION OF 218 IS:
- * TEMP = SIGN((INT + (IFR(10.0 ** IFRCNT))),SIGNAL)
- *
- IF (NOVAR .GT. N) GO TO 220
- X(NOVAR) = TEMP
- GO TO 225
- 220 Y(NOVAR - N) = TEMP
- 225 KARCNT = I + 1
- IF (NOVAR .EQ. NOTOT) RETURN
- IF (LINEND .OR. KARCNT .GT. NCHARS) GO TO 100
- GO TO 105
- *
- * FATAL ERROR SINCE TOO MANY DIGITS IN THE INTEGER OR FRACTIONAL
- * PART OF ONE OF THE NUMBERS IN THE LINE
- *
- 8000 WRITE (IERLUN,8010) LINE
- WRITE (*,8010) LINE
- 8010 FORMAT (1H0,'THIS LINE CONTAINS NUMBERS WITH TOO MANY DIGITS:'/
- + 1H ,A250/
- + 1H0,'FATAL ERROR IN SUBR. XYREAD. CORRECT DATA AND START AGAIN')
- CLOSE (UNIT=INLUN)
- CLOSE (UNIT=IERLUN)
- STOP
- *
- * NON-FATAL ERROR MESSAGES
- *
- *
- * RETURN WITH END OF FILE: ERROR FLAG = 1
- *
- 8015 IERROR = 1
- RETURN
- *
- * RETURN WITH ERROR DURING FILE READ: ERROR FLAG = 4
- *
- 8025 IERROR = 4
- RETURN
- END
- * ---------------------------------------------------------------
- *
- * SUBROUTINE VAREAD
- *
- * PURPOSE
- * TO READ NOVAR VALUES INTO THE ARRAY X. VALUES MAY BE
- * INTEGER OR DECIMAL BUT SINGLE PRECISION FLOATING POINT
- * VALUES WILL BE RETURNED IN ARRAY X, TOGETHER WITH THE NUMBER
- * OF VALUES FOUND IN INTEGER VARIABLE NOVAR.
- *
- * USAGE
- * CALL VAREAD(X,NAME,NOVAR,NAMLOC,INLUN,IERLUN,IERROR)
- *
- * PARAMETERS
- * X VECTOR OF NOVAR VARIABLES
- * NAME RETURNED CHARACTER VARIABLE FOR A FORMAT GROUP
- * OF UP TO 'MAXNAM' CHARACTERS
- * WHERE (MAXNAM = LENGTH OF NAME)
- * NOVAR NUMBER OF VARIABLES FOUND
- * NAMLOC POSITION OF EXPECTED 'A' FORMAT GROUP
- * (MAXIMUM OF 'MAXNAM' CHARACTERS BEFORE A COMMA)
- * INLUN INPUT LOGICAL UNIT NUMBER
- * IERLUN ERROR OUTPUT LOGICAL UNIT NUMBER
- * IERROR ERROR INDICATOR
- * = 1 FOR END OF FILE
- * = 2 FOR UNEXPECTED CHARACTERS
- * = 3 - NOT USED
- * = 4 HARDWARE ERROR DURING FILE READ
- *
- * METHOD
- * READ LINE AND ASSIGN VALUES TO VARIABLES FOUND
- * VALUES MUST BE SEPARATED BY COMMAS.
- * TABS AND MULTIPLE SPACES WILL BE TREATED AS LINE TERMINATORS.
- *
- * AUTHOR
- * A.R. THAWLEY
- * 8 THE COPSE, BANNISTER GREEN, FELSTED, ESSEX, ENGLAND CM6 3NP
- * ---------------------------------------------------------------
- *
- SUBROUTINE VAREAD(X,NAME,NOVAR,NAMLOC,INLUN,IERLUN,IERROR)
- DIMENSION X(*)
- INTEGER LENLIN, MAXNAM, NAMLOC, INLUN, IERLUN, IERROR
- PARAMETER (LENLIN = 250)
- CHARACTER * 1 PLUS, MINUS, BLANK, COMMA, DECPNT, KAR
- CHARACTER * 1 NULL, LINEI, LIN1P1, TAB
- CHARACTER * 1 NUM(10)
- CHARACTER * (LENLIN) LINE
- CHARACTER * (*) NAME
- LOGICAL LINEND
- INTEGER INT, IFR, MAXINT
- PARAMETER (MAXINT = 214748364)
- PARAMETER (PLUS = '+', MINUS = '-', BLANK = ' ', COMMA = ',')
- PARAMETER (DECPNT = '.')
- DATA NUM /'0','1','2','3','4','5','6','7','8','9'/
- NULL = CHAR(0)
- TAB = CHAR(9)
- MAXNO = LENLIN/2
- MAXNAM = LEN(NAME)
- IERROR = 0
- NOVAR = 0
- L = NAMLOC
- *
- * READ IN LINE
- *
- 100 READ (INLUN,1000,ERR=8025,END=8015) LINE
- 1000 FORMAT (A250)
- NCHARS = LENSTR(LINE)
- *
- * WRITE (IERLUN,9000) NCHARS
- * WRITE (*,9000) NCHARS
- *9000 FORMAT (1H ,'SUBROUTINE VAREAD'/1H0,'NUMBER OF CHARS = ',I4)
- * WRITE (IERLUN,9005) NOVAR, NAMLOC
- * WRITE (*,9005) NOVAR, NAMLOC
- *9005 FORMAT (1H ,'NOVAR = ',I4,', NAMLOC = ',I4)
- * WRITE (IERLUN,9010) LINE
- * WRITE (*,9010) LINE
- *9010 FORMAT (1H ,'LINE 9010. READ IN THE FOLLOWING LINE:'/1H0,A250)
- *
- IF (NCHARS .EQ. 0) GO TO 100
- KARCNT = 1
- LINEND = .FALSE.
- 105 DO 120 I = KARCNT,NCHARS
- LINEI = LINE(I:I)
- *
- * LOOK FOR COMMA, NULLS, BLANKS OR TABS AT END OF LINE
- *
- * WRITE (IERLUN,9020) I, LINEI, ICHAR(LINEI)
- * WRITE (*,9020) I, LINEI, ICHAR(LINEI)
- *9020 FORMAT (1H ,I4,'TH CHARACTER IS: ',A1,'! ASCII = ',I4)
- *
- IF (LINEI .NE. BLANK .AND. LINEI .NE. NULL .AND.
- + LINEI .NE. TAB) GO TO 110
- *
- * WRITE (IERLUN,9030)
- * WRITE (*,9030)
- *9030 FORMAT (1H ,'MUST BE A NULL, BLANK OR TAB TO REACH HERE'
- * + 1H ,' (LINE 9030)')
- *
- IF (NOVAR .EQ. L-1) GO TO 110
- *
- * IF (I .EQ. 1) GO TO 100
- *
- * NO MORE CHARACTERS IN LINE
- *
- IF (I .EQ. KARCNT) RETURN
- LINEND = .TRUE.
- IF (I .EQ. NCHARS .OR. LINEI .EQ. TAB) GO TO 125
- LIN1P1 = LINE(I+1:I+1)
- IF (LIN1P1 .EQ. BLANK .OR. LIN1P1 .EQ. NULL .OR.
- + LIN1P1 .EQ. TAB) GO TO 125
- 110 IF (LINEI .EQ. COMMA) GO TO 125
- 120 CONTINUE
- *
- * CHECK FOR SIGN
- *
- 125 IF (NOVAR .EQ. L-1) GO TO 220
- SIGNAL = 1.0
- LINEI = LINE(KARCNT:KARCNT)
- IF (LINEI .EQ. PLUS) GO TO 130
- IF (LINEI .NE. MINUS) GO TO 140
- SIGNAL = -1.0
- 130 KARCNT = KARCNT + 1
- *
- * WHEN COMMA FOUND SET VALUE INTO X
- *
- 140 INT = 0.0
- IFR = 0.0
- IFRCNT = 0
- DO 170 J = KARCNT, I - 1
- KAR = LINE(J:J)
- IF (KAR .EQ. DECPNT) GO TO 180
- DO 150 K = 1,10
- IF (KAR .EQ. NUM(K)) GO TO 160
- 150 CONTINUE
- *
- * ERROR, PRINT OUT OFFENDING LINE
- *
- IERROR = 2
- WRITE (IERLUN,1010) LINE
- WRITE (*,1010) LINE
- 1010 FORMAT (1H0,
- + 'THIS LINE CONTAINS UNEXPECTED NON-NUMERIC CHARACTER(S)'/
- + 1H ,A250)
- RETURN
- 160 INT = 10 * INT + (K - 1)
- *
- * REAL (FLOATING POINT) VERSION OF 160 IS:
- * INT = AINT(INT * 10.0 + FLOAT(K - 1))
- *
- *
- * CHECK FOR OVERFLOW
- *
- IF (INT .GT. MAXINT) GO TO 8000
- 170 CONTINUE
- *
- * DECODE FRACTIONAL PART OF NUMBER
- *
- 180 KARCNT = J + 1
- IF (KARCNT .GE. I) GO TO 215
- DO 210 J = KARCNT, I - 1
- KAR = LINE(J:J)
- DO 190 K = 1,10
- IF (KAR .EQ. NUM(K)) GO TO 200
- 190 CONTINUE
- IERROR = 2
- WRITE (IERLUN,1010) LINE
- WRITE (*,1010) LINE
- RETURN
- 200 IFR = 10 * IFR + (K - 1)
- *
- * REAL (FLOATING POINT) VERSION OF 200 IS:
- * IFR = AINT(IFR * 10.0 + FLOAT(K - 1))
- *
- *
- * CHECK FOR OVERFLOW
- *
- IF (IFR .GT. MAXINT) GO TO 8000
- IFRCNT = IFRCNT + 1
- 210 CONTINUE
- 215 NOVAR = NOVAR + 1
- IF (NOVAR .LE. MAXNO) GO TO 218
- WRITE (IERLUN,1030) MAXNO
- 1030 FORMAT (1H0,'THE MAXIMUM NUMBER OF NUMERIC VALUES ABLE TO BE',
- + ' RETURNED TO THE CALLING PROGRAM BY SUBROUTINE VAREAD,'/
- + 1H ,'I.E. ',I4,
- + ', HAS BEEN EXCEEDED - CONTINUING WITHOUT ERROR RETURN.')
- 218 X(NOVAR) =
- + SIGN((FLOAT(INT) + (FLOAT(IFR)/(10. ** IFRCNT))),SIGNAL)
- *
- * REAL (FLOATING POINT) VERSION OF 218 IS:
- * X(NOVAR) = SIGN((INT + IFR/(10. ** IFRCNT)),SIGNAL)
- *
- GO TO 226
- *
- * PACK CHARACTERS INTO AN 'MAXNAM' CHARACTER VECTOR, NAME, WHICH
- * WILL BE RETURNED AS A CHARACTER VARIABLE
- *
- 220 JJ = 0
- DO 230 J = KARCNT,I-1
- JJ = JJ + 1
- IF (JJ .GT. MAXNAM) GO TO 225
- NAME(JJ:JJ) = LINE(J:J)
- 230 CONTINUE
- IF (JJ .GE. MAXNAM) GO TO 225
- *
- * PACK 'NAME' WITH SPACES
- *
- DO 240 K = JJ+1,MAXNAM
- NAME(K:K) = BLANK
- 240 CONTINUE
- *
- * RESET L SO THAT TEST TO SEE IF PRESENT VARIABLE (NOVAR) POSITION
- * IS THAT OF ALPHANUMERIC WILL ALWAYS FAIL
- *
- 225 L = L - 1
- 226 KARCNT = I + 1
- IF (KARCNT .GT. NCHARS) RETURN
- IF (LINEND) RETURN
- GO TO 105
- *
- * FATAL ERROR SINCE TOO MANY DIGITS IN THE INTEGER OR FRACTIONAL
- * PART OF ONE OF THE NUMBERS IN THE LINE
- *
- 8000 WRITE (IERLUN,8010) LINE
- 8010 FORMAT (1H0,
- + 'THIS LINE CONTAINS NUMBER(S) WITH TOO MANY DIGITS: '/
- + 1H ,A250/
- + 1H0,'FATAL ERROR IN SUBR. VAREAD. ',
- + 'CORRECT DATA AND START AGAIN!')
- CLOSE (UNIT=INLUN)
- CLOSE (UNIT=IERLUN)
- STOP
- *
- * RETURN WITH END OF FILE: ERROR FLAG = 1
- *
- 8015 IERROR = 1
- RETURN
- *
- * RETURN WITH ERROR DURING FILE READ: ERROR FLAG = 4
- *
- 8025 IERROR = 4
- RETURN
- END
- * ---------------------------------------------------------------
- *
- * FUNCTION SECNDS
- *
- * PURPOSE
- * TO READ IN TIMER AND RETURN IT CONVERTED TO SECONDS
- *
- * AUTHOR
- * A.R. THAWLEY
- * 8 THE COPSE, BANNISTER GREEN, FELSTED, ESSEX, ENGLAND CM6 3NP
- *
- * ---------------------------------------------------------------
- *
- REAL FUNCTION SECNDS()
- INTEGER TIME(0:1)
- CALL OSWORD(1, TIME)
- TEMP = TIME(0)
- SECNDS = TEMP/100.0
- END
-