f77 limitations
Walter B England
england at csd4.csd.uwm.edu
Thu Aug 31 04:28:17 AEST 1989
There are two problems which severely limit the utility of f77 on A/UX
1.1. These are described and illustrated in the following with
source, explanations, and -- where possible -- input/output.
Everything was run on a mac IIx. For what I do, f77 cannot be used
until there is a workaround or these are fixed.
Problem 1: f77 does not recognize common as a global (external).
Consequently, routines which share common must appear in the same
file. Porting large fortran source is then very difficult.
integer array(10), array2(30)
common /block/ array
common /bloc2/ array2
do 1942 i = 1, 10
1942 array(i) = i
print *, ' main: array', array
do 1943 k = 1, 30
1943 array2(k) = -k
print *, ' main: array2', array2
call sub1
end
subroutine sub1
integer array(10), array2(30)
common /block/ array
common /bloc2/ array2
print *, ' sub1: array', array
print *, ' sub1: array2', array2
return
end
***** Here is screen output after compilation with A/UX 1.1 f77 ******
main: array 1 2 3 4 5 6 7 8 9 10
main: array2 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18
-19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30
sub1: array 0 0 0 0 0 0 0 0 0 0
sub1: array2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
***** Here is output from nm main.o *****
Symbols from main.o:
Name Value Class Type Size Line Section
main.f | | file | | | |
v%1 | 372|static| | | |.bss
v%3 | 376|static| | | |.bss
MAIN__ | 0|extern| | | |.text
block_ | 380|static| | | |.bss
bloc2_ | 420|static| | | |.bss
s_wsle | 0|extern| | | |
do_lio | 0|extern| | | |
e_wsle | 0|extern| | | |
sub1_ | 0|extern| | | |
v%2 | 340|static| | | |.data
v%4 | 356|static| | | |.data
***** Here is output from nm sub1.o *****
Symbols from sub1.o:
Name Value Class Type Size Line Section
sub1.f | | file | | | |
sub1_ | 0|extern| | | |.text
block_ | 300|static| | | |.bss
bloc2_ | 340|static| | | |.bss
s_wsle | 0|extern| | | |
do_lio | 0|extern| | | |
e_wsle | 0|extern| | | |
v%1 | 268|static| | | |.data
v%2 | 284|static| | | |.data
Problem 2: f77 will not accept negative integers smaller than
-999,999,999. (I didn't run all negative integers between -(2**31-1)
and -10**9, but none I tried worked.) It is difficult to exploit
masking and bits operations from cc with this limitation.
c main program
c run this on A/UX 1.1 f77 with input
c 1) m = 2**31 - 1
c 2) m = 1000000000
c 3) m = 999999999
c 1) & 2) fail at the statement m = -m and dump core.
c 3) runs without error.
read *, m
print *, ' 32 bit integer is ', m
print *, 'next statement sets m = -m '
m = - m
print *, ' negative of 32 bit integer is ', m
end
The corresponding C-language program on A/UX 1.1 works ok.
Finally, f77 limits the user to file numbers <= 19. I would like to
change this to <= 99.
--
Walter B. England; Chemistry Department; University of Wisconsin-Milwaukee
3210 North Cramer Street; Milwaukee, WI 53201
ARPANET: england at csd4.csd.uwm.edu
USENET: uwvax!uwcsd1!uwcsd4!england
More information about the Comp.unix.aux
mailing list