C This program does not work
C remove or comment out line 6 (the if/execute stmt) and it will work
program tst
real la
integer j,m
do 20 m=1,4
la=480./3600.
j=24
if (m.EQ.-1) execute 'v2:MacFortran 2.2'
write (9,fmt='(a,f14.2,2i20)') 'Bef Passing:',la,j,m
write (9,fmt='(a,f14.2)') 'Val of bugger:',bugger(la,j,m)
20 write (9,fmt='(a,f14.2,2i20)') 'Aft Passing:',la,j,m
pause
execute 'v2:macFortran 2.2'
end
real function bugger(lambda,i,m)
C just passes the factorial of the third parameter
real lambda
integer i,m
write (9,100) 'bugger:',lambda,i,m
100 format(a,f14.2,3x,2i20)
bugger=real(ifact(m))
return
end
integer function ifact(i)
C Compute Factorial
C Param - i Returns - i!
integer i,k
ifact=1
IF (i.EQ.0) return
do 5 k=1,i
5 ifact=ifact*k
return
end
The values of la,j, and m in the main program were always trashed upon
returning from the function - but for the first time only! In addition
I noted that, even though m was trashed, usually to some large integer,
the program still counted the do loop correctly and called
the function 4 times. After two days worth of messing around, changing
random stuff here and there, lo and behold, upon removing line
6 (the if/execute line, a spurious line left over from a previous version
of the program that didn't work either, but accepted keyboard input and
was supposed to exit upon detecting an input value of -1), the following
program was created. It runs fine and the values are not trashed!
C This program works ok
C comment out line 6 (the if/execute stmt) and it will work
program tst
real la
integer j,m
do 20 m=1,4
la=480./3600.
j=24
C if (m.EQ.-1) execute 'v2:MacFortran 2.2'
write (9,fmt='(a,f14.2,2i20)') 'Bef Passing:',la,j,m
write (9,fmt='(a,f14.2)') 'Val of bugger:',bugger(la,j,m)
20 write (9,fmt='(a,f14.2,2i20)') 'Aft Passing:',la,j,m
pause
execute 'v2:MacFortran 2.2'
end
real function bugger(lambda,i,m)
(EXACTLY the same as above)
return
end
integer function ifact(i)
(EXACTLY the same as above)
return
end
I know that MacFortran is extraordinarily sensitive to nulls and other
spurious characters that sometimes end up in a source file, but I looked
at the first file with FEdit and there are none -the file is clean.
What gives? Is MacFortran incapable of handling external functions?
Anybody else have this problem? Someone should try clipping the first
listing above and see is it works - maybe there is something wrong with
my particular copy or something.
Meanwhile, I will valiantly try to find a workaround, But it's kind of
like trying to find a workwround when you add 2+2 and get 5.
%*!&^&#*!
-Wiley Sanders
wma...@ngp.UTEXAS.EDU