This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
G77 Compiler Users Guide?
- From: "Heggli Mark" <Mark dot Heggli at snowyhydro dot com dot au>
- To: <gcc at gcc dot gnu dot org>
- Date: Mon, 14 Jun 2004 20:18:36 +1000
- Subject: G77 Compiler Users Guide?
Where is the very best place to find a description/options/switches for G77. I have looked at g77doc.zip, and there just aren't many if any examples of it's use. I am familiar with the old Microsoft Fortran, but would really like to use G77.
Much of my legacy code is failing because of a differences in what is allowed while coding. This all has to do with the first 6 characters. Can you tell me which rules apply when coding for the first 6 characters?
Here is a brief sample of my legacy code...that has problems, and I am hoping that I don't need to move everything over. If I must, then I will.
Thanks for looking into with me.
$notruncate
C ******* SUBROUTINE ARROW
C
SUBROUTINE ARROW(X,Y,D,S,SCALE)
COMMON /ONE/HD,WD,WS,RADIANS,SBH,SFH,SFA,SHBH,S5BH,S5BA,SINC,IX,IY
C COMMON /TKTRNX/ KBAUDR,KERROR,KGRAFL,KHOMEY,KKMODE,
C 1 KHORSZ,KVERSZ,KITALC,KSIZEF,KLMRGN,KRMRGN,
C 2 KTBLSZ,KHORZT(10),KVERTT(10),
C 3 KBEAMX,KBEAMY,KMOVEF,KPCHAR(4),KDASHT,
C 4 KMINSX,KMINSY,KMAXSX,KMAXSY,TMINVX,TMINVY,
C 5 TMAXVX,TMAXVY,TREALX,TREALY,TIMAGX,TIMAGY,
C 6 TRCOSF,TRSINF,TRSCAL
REAL X,Y,D,S
REAL RADIUS
INTEGER OP,REZ
INTEGER XX,YY
C
DATA OP /1/ ;chooses virtual coords.+ absolute moves in PCIR
DATA REZ /60/ ;draw circle(hexagon) in 60-degree increments in PCIR
C
C CALL ANMODE
C TYPE*,KBAUDR,KERROR,KGRAFL,KHOMEY,KKMODE,KHORSZ,KVERSZ,KITALC
C TYPE*,KSIZEF,KLMRGN,KRMRGN,KTBLSZ,KBEAMX,KBEAMY,KMOVEF,KDASHT
C TYPE*,KMINSX,KMINSY,KMAXSX,KMAXSY,TMINVX,TMINVY,TMAXVX,TMAXVY
C TYPE*,TREALX,TREALY,TIMAGX,TIMAGY,TRCOSF,TRSINF,TRSCAL
C PAUSE
HD=INT(SCALE*INT(4096/10.25)) ;LENGTH OF DIR. ARROW
SBH=INT(HD*0.40) ;HEIGHT OF BARBS IN FRACTION OF DIR LENGTH
SFH=INT(HD*0.40) ;HEIGHT OF FLAGS IN FRACTION OF DIR LENGTH
SFA=INT(HD*0.1200) ;FLAG BASE DISTANCE IN FRACTION OF DIR LENGTH
SHBH=INT(HD*0.2) ; HEIGHT OF HALF BARB IN FRACTION OF DIR LENGTH
S5BH=INT(HD*0.28) ; HEIGHT OF 5 BARB IN FRACTION OF DIR LENGTH
S5BA=INT(HD*0.2) ; DISTANCE OF 5 BARB ANGLE ALONG LENGTH
SINC=INT(HD*0.08) ;DISTANCE BETWEEN BARBS IN FRACTION OF DIR LENGTH
IBRB=0
IFLG=0
WS=S
WD=D
RADIUS = SCALE * 5.
CALL PCIR(X,Y,OP,RADIUS,REZ) ;OP,REZ set in data stmt above
CALL MOVEA(X,Y)
CALL SEELOC(IX,IY)
RADIAN1 = (-D+90) * 0.017453293
RADIANS = (-D) * 0.017453293
XX = HD *COS(RADIAN1) + IX
YY = HD *SIN(RADIAN1) + IY
CALL DRWABS(XX,YY)
IFLG=(WS+2.5)/50.
IF(IFLG > 0)CALL FLAG(IFLG,RADIAN1)
WS=WS-(IFLG*50.)
IBRB=(WS+2.5)/10.
IF(IBRB > 0)CALL BARB(IBRB,RADIAN1)
WS=WS-(IBRB*10.)
IF( WS > 2.5.AND.IBRB+IFLG == 0)THEN
CALL FIVEBRB(RADIAN1)
ELSEIF(WS > 2.5)THEN
CALL HLFBRB(RADIAN1)
ENDIF
RETURN
END
C
C ******* SUBROUTINE BARB
C
SUBROUTINE BARB(IBRB,RADIAN1)
COMMON /ONE/HD,WD,WS,RADIANS,SBH,SFH,SFA,SHBH,S5BH,S5BA,SINC,IX,IY
REAL WD,WS,RADIAN1
INTEGER XX,YY,XXX,YYY
C
RADIANS = (-WD) * 0.017453293
W=HD-(IBRB-1)*SINC
C
DO 100 Z=HD,W,-SINC
XX = Z * COS(RADIAN1) + IX
YY = Z * SIN(RADIAN1) + IY
CALL MOVABS(XX,YY)
XXX = SBH * COS(RADIANS) + XX
YYY = SBH * SIN(RADIANS) + YY
CALL DRWABS(XXX,YYY)
TMP=Z
100 CONTINUE
HD=TMP-SINC
RETURN
END
C
C ******* SUBROUTINE FIVEBRB
C
SUBROUTINE FIVEBRB(RADIAN1)
COMMON /ONE/HD,WD,WS,RADIANS,SBH,SFH,SFA,SHBH,S5BH,S5BA,SINC,IX,IY
REAL WD,WS,RADIAN1
INTEGER XX,YY,XXX,YYY,XX2,YY2
C
RADIANS = (-WD) * 0.017453293
C
Z=INT(HD*.750)
XX = Z * COS(RADIAN1) + IX
YY = Z * SIN(RADIAN1) + IY
CALL MOVABS(XX,YY)
XXX = S5BH * COS(RADIANS) + XX
YYY = S5BH * SIN(RADIANS) + YY
CALL MOVABS(XXX,YYY)
XX2=(Z-S5BA) * COS(RADIAN1)+IX
YY2=(Z-S5BA) * SIN(RADIAN1)+IY
CALL DRWABS(XX2,YY2)
RETURN
END
C
C ******* SUBROUTINE HLFBRB
C
SUBROUTINE HLFBRB(RADIAN1)
COMMON /ONE/HD,WD,WS,RADIANS,SBH,SFH,SFA,SHBH,S5BH,S5BA,SINC,IX,IY
REAL WD,WS,RADIAN1
INTEGER XX,YY,XXX,YYY
C
RADIANS = (-WD) * 0.017453293
C
XX = HD * COS(RADIAN1) + IX
YY = HD * SIN(RADIAN1) + IY
CALL MOVABS(XX,YY)
XXX = SHBH * COS(RADIANS) + XX
YYY = SHBH * SIN(RADIANS) + YY
CALL DRWABS(XXX,YYY)
RETURN
END
C
SUBROUTINE FLAG(IFLG,RADIAN1)
COMMON /ONE/HD,WD,WS,RADIANS,SBH,SFH,SFA,SHBH,S5BH,S5BA,SINC,IX,IY
INTEGER XX,YY,XX2,YY2,XXX1,YYY1
REAL WD,WS,RADIAN1
C
RADIANS = (-WD) * 0.017453293
DO 201 Z=HD,HD-(IFLG-1)*SFA,-SFA
XX = Z * COS(RADIAN1) + IX
YY = Z * SIN(RADIAN1) + IY
CALL MOVABS(XX,YY)
C XX1 =(Z-3.)* COS(RADIAN1) + X
C YY1 =(Z-3.)* SIN(RADIAN1) + Y
C XXX1 =10.0 * COS(RADIANS) + XX1
C YYY1 =10.0 * SIN(RADIANS) + YY1
XXX1 =SFH * COS(RADIANS) + XX
YYY1 =SFH * SIN(RADIANS) + YY
CALL DRWABS(XXX1,YYY1)
XX2 =(Z-SFA)* COS(RADIAN1) + IX
YY2 =(Z-SFA)* SIN(RADIAN1) + IY
CALL DRWABS(XX2,YY2)
TMP=Z
201 CONTINUE
HD=Z-SINC
CALL MOVABS(XX,YY)
CALL DRWABS(XXX1,YYY1)
CALL DRWABS(XX2,YY2)
RETURN
END
C
C*** SUBROUTINE PCIR
C
SUBROUTINE PCIR(X,Y,N,RAD,IREZ)
* This sub is used to plot a point and circle at a
* given location.
*N=Point option code: coord sys./relitive or absolute move
* 1= user(virtual) /abs
* 2= user(virtual) /rel
* 3= screen/abs
* 4= screen/rel
*RAD =diagonal dist from center to farthest pt in raster units.
*IREZ=resolution of circle. Number of degrees/increment.
IF(N==1)THEN
CALL POINTA(X,Y)
ELSEIF(N==2)THEN
CALL POINTR(X,Y)
ELSEIF(N==3)THEN
CALL PNTABS(IFIX(X),IFIX(Y))
ELSEIF(N==4)THEN
CALL PNTREL(IFIX(X),IFIX(Y))
ELSE
CALL POINTA(X,Y)
ENDIF
* Default call is POINTA. (virtual,absolute)
IF(RAD < 0.)RAD=0.1
IF(IREZ < 1)IREZ=1
CALL MOVEA(X,Y+RAD)
DO 50 I=90,450,IREZ
RADIANS=I*0.017453293
XX=RAD*COS(RADIANS)+X
YY=RAD*SIN(RADIANS)+Y
CALL DRAWA(XX,YY)
50 CONTINUE
RETURN
END
Thanks and G'day,
Mark Heggli
Snowy Hydro
Cooma, NSW
AUSTRALIA